Я работаю над проблемой и потратил на нее некоторое время. Заявление об ошибке: Вам предоставляется массив положительных и отрицательных целых чисел. Если число n в индексе положительное, переместите n шагов. И наоборот, если он отрицательный (-n), двигайте назад n шагов. Предположим, что первый элемент массива находится вперед рядом с последним элементом, а последний элемент находится назад рядом с первым элементом. Определите, существует ли цикл в этом массиве. Цикл начинается и заканчивается с определенным индексом с более чем 1 элементом вдоль цикла. Цикл должен быть «вперед» или «назад».Circular Array Loop, обнаружение
Пример 1: Учитывая массив [2, -1, 1, 2, 2], существует петля из индекса 0 -> 2 -> 3 - > 0.
Пример 2: Учитывая массив [-1, 2], нет петли
. Примечание: данный массив гарантированно не содержит ни одного элемента "0"
Можете ли вы. сделать это в O (n) сложности времени и O (1) сложности пространства?
И это мое решение в процессе, однако, я не уверен, как мне d условие do-while, когда нет обнаруженного цикла. Я считаю, что мой код будет работать бесконечно, если не обнаружено никакого цикла.
public static boolean circularArrayLoop(int[] nums) {
int size = nums.length;
if(size < 2) return false;
int loopStart = nums[0];
int index = 0;
int start = nums[0];
do{
if(nums[index] > 0){
index = moveForward(index, nums[index], size);
}else {
index = moveBackward(index, Math.abs(nums[index]), size);
}
}while (loopStart != nums[index]);
}
При каких обстоятельствах может отсутствовать цикл, если 0 не встречается в массиве? (Учитывается ли он как O (0), если метод состоит только из 'return true;')? –
Вы можете считать цикл до размера. И остановить цикл, когда число равно размеру –
Мое понимание: no loop действительно означает «loop with only one element» => Когда один элемент указывает на себя, что происходит, что сказал @Surace. – alexbt