检查数组中备用条目的最有效方法

时间:2017-05-16 14:48:07

标签: java arrays

我有一个大小为10000的int数组,它只由1和0组成。当我将它转换为字符串时,它看起来像这样

String str="101010101010101010101001010101010101011110000000000001101010101101......"

我的任务是检查此数组是否有备用条目。

我试过这样:

       Case 1:                                           Case 2:
//when str=010101010.....                         //when str=101010101.....
boolean cha =true;                                boolean ch=true;
for(int j=0;j<n;j++)                              for(int j=0;j<n;j++)
{                                                 {
    if(j%2==0)                                         if(j%2==1)
    {                                                  {
       if(arr[j]==1)                                       if(arr[j]==0)
          cha=false;                                           cha=true;
    }                                                   }
    if(j%2==1)                                         if(j%2==0)
    {                                                   {
        if(arr[j]==0)                                       if(arr[j]==1)
            cha=false;                                           ch=false;
    }                                                    }
    if(cha==false)                                     if(ch==false) 
        break;                                              break;
}                                                  }

if(cha==true)                                     if(ch==true)
     System.out.println("YES");                   System.out.println("YES");

有没有比循环遍历整个数组更好的方法,比较每个术语然后在没有找到替代时断开?

3 个答案:

答案 0 :(得分:3)

您可以使用正则表达式:

String pattern = "^(10)+1{0,1}$|^(01)+0{0,1}$";
String s1 = "01010101";
String s2 = "101010101";
String s3 = "11001111";
s1.matches(pattern); // return true
s2.matches(pattern); // return true
s3.matches(pattern); // return false

答案 1 :(得分:1)

对于那些对“流畅”Java 8解决方案感兴趣的人:

C:\Program Files (x86)\Graphviz2.38\bin\dot.exe

答案 2 :(得分:0)

最简单的做法可能是验证前两个元素的所有元素:

// Replace this with a better test if you can have something other than 0 and 1
if(arr[0] + arr[1] != 1) {
    cha = false;
} else {
    for(int i = 2; i < arr.length; i++) {
        if(arr[i] != arr[i % 2]) {
            cha = false;
            break;
        }
    }
}
如果偶数元素不等于cha中的任何元素,则

false将设置为arr[0],因为i % 2对于偶数元素将始终为零。同样适用于奇数元素和arr[1]