我正在研究一個問題,並花了一些時間在它上面。 問題說明: 給出了一組正整數和負整數。如果指數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