Java-如何快速判断一个数组是不是另一个数组的倒序?

Java-如何快速判断一个数组是不是另一个数组的倒序?

夜无邪 发布于 2017-01-17 字数 175 浏览 1289 回复 15

有两个数组:
int[] data1 = {14,-70,-18,88,85,97,-65,13,-71,-12};
int[] data2 = {-12,-71,13,-65,97,85,88,-18,-70,14};

如何判断data2是否是dat1的逆转啊?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(15

偏爱自由 2017-09-12 15 楼

我附加一下:

#define block xx
...
for(int i=0; i<len; i+=block)
...
for(int i=1; i<len; i+=block)
...
for(int i=block-1; i<len; i+=block)
...

隔段比较,在数组长度很大的情况下应该能有点优化。

想挽留 2017-08-07 14 楼

判断长度一否一致,然后逐个比较,遇到不同直接返回false。

ps:期待大神。

归属感 2017-07-29 13 楼

boolean isArrayReverse(int[] data1, int[] data2) {

if (data1.length != data2.lenght){
return false;
}

int len = data1.length();
boolean ret = true;
for (int i=0; i<len ; ++i) {
if (data1[i] != data2[len - i - 1]) {
ret = false;
break;
}
}

return ret;
}

基本上就是先判断数组长度是否相等,不等直接返回false,否则首尾比较,有一个不等就跳出比较,返回false。

灵芸 2017-07-26 12 楼

这个应该不会有其它办法了吧?

首先判断长度,不一致的直接跳出
然后逐个扫描,遇到不同的退出,应该就这样了吧。

泛泛之交 2017-07-11 11 楼

冒泡排序,也就是多循环+判断,自己多研究一下,感觉自己研究出来了才是自己学到的,网上的只能参考和辅助一下!

瑾兮 2017-07-01 10 楼

首先判断两个数组长度是否一致,如果不一致直接返回。
如果长度一致,则从头到尾逐一比较,不会更快了

归属感 2017-06-17 9 楼

1、现判断长度
2、data1 data2前后对比,比较不成功就break;
返回boolean.

夜无邪 2017-06-10 8 楼

Haskell实现
<coding-1 lang="haskell">
issamereverse xs ys= xs == reverse ys
</coding>

夜无邪 2017-06-01 7 楼

下面有一种实现方式,最好的情况是比较一次就可以得到结果,最好情况是比较一次,最坏的情况是全数组扫描,应该是较优的一种实现方式。

public static boolean compare(int[] a, int[] b) {
if (a == null || a.length == 0 || b == null || b.length == 0) {
return false;
}
if (a.length != b.length) {
return false;
}

int l = a.length;

for (int i = 0; i < l / 2; i++) {
if (a[i] != b[l - i - 1])
return false;
}
for (int i = l / 2; i < l; i++) {
if (a[i] != b[l - i - 1])
return false;
}
return true;
}

虐人心 2017-05-07 6 楼

比较每一个数值的时候可以用多线程,这个会快一点,在利用返回之进行与运算就可以得到结果了

清晨说ぺ晚安 2017-05-06 5 楼

有现成的函数Arrays.sort(intArray)就可以了

晚风撩人 2017-05-03 4 楼

<coding-1 lang="java">
public void test1(){
int[] data1 = {14,-70,-18,88,85,97,-65,13,-71,-12};
int[] data2 = {-12,-71,13,-65,97,85,88,-18,-70,14};
int length = data1.length;
if(length == data2.length){
int i=0;
while(i<length){
if(data1[i] == data2[length-(i+1)]){
i++;
}
}
if(i==(length)){
System.out.println("data1为data2的逆序。");
}else{
System.out.println("data1不为data2的逆序。");
}

}else{
System.out.println("data1不为data2的逆序。");
}
}

</coding>

泛泛之交 2017-05-03 3 楼

纯算法问题,如果这个数组的长度是百万级,而且一个数组除了最后一个,与第二个数组的第一个不一样,其他都一样。可能存在着优化的算法。这个需要研究语言底层的实现细节。
举个例子来说: "加减运算"是计算机最快的执行方法,是否可以通过元素值和数组序列的加减来得到一个double数,最后比较的是这个double数。

想挽留 2017-02-14 2 楼

boolean equalsReverse(int[] data1,int[] data2){
if(data1.length!=data2.length)return false;
for(int i=0;i<data1.length;i++){
if(data1[i]!=data2[data1.length-i-1])return false;
}
return true;
}

第二种方法:

boolean equalsReverse(int[] data1,int[] data2){
List l = new ArrayList();
for (int i=data2.length;i>0;i--)l.add(data2[i-1]);
return l.toString().equals(Arrays.toString(data1));
}

偏爱自由 2017-02-09 1 楼

Java代码如下:

public static boolean isArrayReverse(Object[] o1,Object[] o2) {
if(o1.length != o2.length) return false;
for(int i = 0;i<o1.length;i++){
if(!o1[i].equals(o2[o2.length - i - 1])) return false;
}
return true;
}