检查数组中的3个值是否连续?

时间:2011-02-09 02:44:33

标签: arrays arraylist int

我有一个数组,例如包含值123456,显然包含超过3个连续值。

如果数组中至少包含3个连续值,我想要一个返回true的方法,提前谢谢。

例如:

972834 - 返回true(234)

192645 - 返回true(456)

等。等。

更新! :

我在java中有一个数组,它需要6个整数。 例如nextTurn [],它包含8 4 2 5 6 5 目前它对阵列进行排序 - 2 4 5 5 6 8

如果整个阵列中有3个连续数字,我怎么能让它返回true?

即所以它会找到4 5 6

我还希望它返回数组中整数的位置, 所以对于原始阵列8 4 2 5 6 5

它将返回,2 4 5 或2 5 6

感谢所有帮助人员,感谢

4 个答案:

答案 0 :(得分:2)

最直接的解决方案是简单地循环浏览项目,并检查接下来的两项:

bool HasConsecutive(int[] a){
  for(int i = 0; i < a.Length - 2; i++) {
    if (a[i + 1] == a[i] + 1 && a[i + 2] == a[i] + 2) return true;
  }
  return false;
}

另一个解决方案是遍历项目并计算连续项目:

bool HasConsecutive(int[] a){
  int cnt = 1;
  for (int i = 1; i < a.Length; i++) {
    if (a[i] == a[i - 1] - 1) {
      cnt++;
      if (cnt == 3) return true;
    } else {
      cnt = 1;
    }
  }
  return false;
}

答案 1 :(得分:1)

应该标记作业,我假设。

在伪代码中,你会想要一些

的内容
for int i = 0 to array.length - 2
    temp = array[i]
    if((array[i+1] == (temp + 1)) && (array[i+2] == (temp + 2)))
        return true
else return false

编辑:假设你有一个int数组。如果它是一个字符串,你将不得不使用charAt(position)行的东西,然后通过减去'0'或使用parseInteger函数将char转换为十进制数

误导性部分的更新

为了做到这一点,为了简单起见,我会创建一个与字符串长度相同的数组

int arr[array.length];

然后循环遍历字符串数组中的每个项目,同时在数字落在

的位置递增arr

(假设一个char数组,单个数字)     for(int i = 0; i&lt; array.length; i ++)         arr [array [i] - '0'] ++;

然后通过arr检查连续三个数字

for( int i = 0; i < arr.length - 2; i++ )
    if( arr[i] >= 1 && arr[i+1] >= 1 && arr[i+2] >= 1 )
        return true;

return false;

答案 2 :(得分:1)

h = new hash table
for i in array
  if  i + 1 in h && i + 2 in h
    return i, i+1, i+2
  add i to h
return no-match

答案 3 :(得分:0)

迟到了聚会,但这是一个解决方案。

function checkConsecutiveExists(arr) {
  for (let i = 0; i < arr.length; i++) {
    if (checkNumLast(arr, arr[i]) || checkNumMid(arr, arr[i]) || checkNumFirst(arr, arr[i])) {
      return true;
    }
  }
  return false;
}


function checkNumLast(arr, num) {
  return arr.includes(num - 2) && arr.includes(num - 1);
}

function checkNumMid(arr, num) {
  return arr.includes(num - 1) && arr.includes(num + 1);
}

function checkNumFirst(arr, num) {
  return arr.includes(num + 1) && arr.includes(num + 2);
}

console.log(checkConsecutiveExists([9, 7, 2, 8, 3, 4]));
console.log(checkConsecutiveExists([1, 9, 2, 6, 4, 50]));

这是蛮力的解决方案,所以不是最佳解决方案。