проверить, если 3 значения в массиве являются последовательными? - PullRequest
1 голос
/ 09 февраля 2011

У меня есть массив, который, например, содержит значения 123456, который, очевидно, содержит более 3 последовательных значений.

Мне нужен метод, который будет возвращать значение true, если массив содержит в себе хотя бы 3 последовательных значения, заранее спасибо.

например:

972834 - вернуть true (234)

192645 - вернуть true (456)

и т. д.и т.д ..

обновление!:

У меня есть массив в Java, он занимает 6 целых чисел.например nextTurn [], и он содержит 8 4 2 5 6 5 в момент сортировки массива - 2 4 5 5 6 8

как бы получить его, чтобы он возвращал значение true, если на всем протяжении 3 последовательных чиселмассив?

т.е. так что он найдет 4 5 6

я бы также хотел, чтобы он возвращал позицию целого числа в массиве, поэтому для исходного массива 8 4 2 5 6 5

вернется, 2 4 5 или 2 5 6

спасибо за вашу помощь, ребята, ценится

Ответы [ 3 ]

2 голосов
/ 09 февраля 2011

Самым простым решением было бы просто пройтись по пунктам и проверить по следующим двум пунктам:

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 голос
/ 09 февраля 2011
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
1 голос
/ 09 февраля 2011

Должен быть помечен как домашнее задание, которое я предполагаю.

В псевдокоде вы захотите что-то вроде

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

edit: предполагается, что у вас есть массивИнтс.Если это строка, вам нужно будет использовать что-то по строкам charAt (position), а затем преобразовать char в десятичное число, вычитая «0» или используя функцию parseInteger

Обновление вводящей в заблуждение части

Для этого я бы создал массив такой же длины строки, для простоты ради

int arr[array.length];

, а затем перебрал все элементы встроковый массив, при увеличении arr в позиции число падает до

(при условии массива char, однозначных чисел) для (int i = 0; i

, затем пройти проверку 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;
...