如何在不使用长布尔表达式的情况下解决这个问题?

时间:2014-03-09 22:11:41

标签: java

package pks;

    public class pks {
        public static void main (String args[])

        {
        System.out.println (isDaphne(new int[]{1, 0, 0, 1, 0, 0, 0, 1, 6}));
        }

        static int isDaphne (int [ ] a) {
        int counter=0;
        for (int i=0; i<=5; i++)

        {
            if (a[i] == 0 && a[i+1] == 0 && a[i+2] + a[i+3] == 0) {

                counter++;
                break;

            }
            else     
            {

            }
        }
    return counter;
    }
}

当有4个连续0的

时,程序的输出为1

但我不想使用这个表达式:

if (a[i] == 0 && a[i+1] == 0 && a[i+2] + a[i+3] == 0) 

有没有其他方法可以做到这一点,而不使用上面的表达式?

不允许使用其他数组,hashmap等。不允许使用Arrays.sort(..)

4 个答案:

答案 0 :(得分:1)

你可以使用这样的东西

Integer[] array = new Integer[LENGTH];
//fill array
Arrays.asList(array).subList(0,4).contains(0);// use i and i+4 in a for loop

如果您正在寻找更好的时间复杂性,这是一种字符串搜索。看看string searching algorithms

答案 1 :(得分:0)

您可以执行类似

的操作
static int isDaphne (int [ ] a) 
{
    int counter=0;
    int auxCounter = 0;
    for (int i=0; i<a.length; i++)
    {
        if(a[i] == 0)
        {
            ++auxCounter;
        }
        else
        {
            auxCounter = 0;
        }
        if(auxCounter > 3)
        {
           ++counter;
        }
    }
return counter;
}

答案 2 :(得分:0)

好的,我会试一试:

为什么不使用正则表达式:

import java.util.Arrays;
import java.util.regex.Pattern;

public class Test
{
    public static void main(String[]args)
    {
        int[] arr = {1,2,3,0,0,0,0,4};
        System.out.println(Arrays.toString(arr));
            //below will return true
        System.out.println(Pattern.matches(".*0, 0, 0, 0.*",Arrays.toString(arr)));
    }
}

这是允许的吗?

答案 3 :(得分:0)

目标是检查int的输入数组是否包含四个连续的零。

我有两个问题的解决方案。

第一:

int consecutiveZeros = 0;

for(int i=0; i< input.length; i++) {
  if(input[i] == 0) {
    consecutiveZeros++;
  } else {
    consecutiveZeros = 0;
  }

  if(consecutiveZeros == 4) {
    return true; 
  }
}

第二:

如果数组中的值介于0到65 535之间。我会使用char类型而不是int

static boolean isDaphne (char [] input) {
   return new String(input).contains("0000");
}

如果无法更改输入类型。编写一个将更改它的包装器,从int到char并使用第一个解决方案。