我正在研究一个问题,并花了一些时间在它上面。 问题说明: 给出了一组正整数和负整数。如果指数n是正数,则前进n步。相反,如果它是负数(-n),则向后移动n步。假设数组的第一个元素在最后一个元素旁边转发,最后一个元素在第一个元素后面。确定此数组中是否存在循环。循环开始并结束于循环中具有多于一个元素的特定索引处。示例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? (如果方法只包含'return true;',它会计为O(0))吗? –
你可以计算循环,直到大小。并停止循环,当计数等于大小 –
我的理解:没有循环真的意味着“循环只有一个元素”=>当一个元素指向自己,哪个下降@Surace说。 – alexbt