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(..)
答案 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并使用第一个解决方案。