2011-02-09 4 views
0

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

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

, например:

972834 - возвращает истину (234)

192645 - возвращает истинное (456)

и т.д. и т.п ..

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

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

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

т.е. так будет найти 4 5 6

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

это будет вернуться, 2 4 5 или 2 5 6

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

+0

Какой язык вы используете? Кроме того, они не похожи на массивы, больше похоже на строки (если, маловероятно, вы ссылаетесь на 'char *') – BoltClock

ответ

0

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

В псевдокоде вы будете хотеть что-то вдоль линий

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 

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

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

Чтобы сделать это, я бы создать массив ту же длину строки, ради простоты

int arr[array.length]; 

затем цикл по каждому элементу в массиве строк, в то время как приращение обр в положении число падает на

(предполагая массив символов, цифры с одной цифрой) for (int i = 0; i < массив.длина; i ++) arr [array [i] - '0'] ++;

затем пройти через обр проверки в течение трех последовательных чисел

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; 
+0

Проверьте примеры, показанные в вопросе, заголовок немного вводит в заблуждение. Похоже, что они хотят знать, существуют ли три последовательных числа в любом месте всего массива, * не *, находятся ли они в последовательных местах. – LukeH

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; 
} 
+0

Проверьте примеры, показанные в вопросе, название немного вводит в заблуждение. Похоже, что они хотят знать, существуют ли три последовательных числа в любом месте всего массива, * не *, находятся ли они в последовательных местах. – LukeH

+0

@ LukeH: Хм ... Кажется, вы правы. Тогда не только название вводит в заблуждение, но и большую часть вопроса. Последовательный означает, что числа следуют друг за другом, цифры, выбранные в случайных местах в массиве, не являются последовательными. – Guffa

+0

Я согласен с тем, что формулировка очень вводит в заблуждение, но сами цифры - например, 2, 3 и 4 - * являются последовательными, они просто не находятся в последовательных ячейках массива. – LukeH

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 
Смежные вопросы