環形陣列迴圈 210105

2021-10-13 23:21:56 字數 1087 閱讀 2680

給定乙個含有正整數和負整數的環形陣列 nums。 如果某個索引中的數 k 為正數,則向前移動 k 個索引。相反,如果是負數 (-k),則向後移動 k 個索引。因為陣列是環形的,所以可以假設最後乙個元素的下乙個元素是第乙個元素,而第乙個元素的前乙個元素是最後乙個元素。

確定 nums 中是否存在迴圈(或週期)。迴圈必須在相同的索引處開始和結束並且迴圈長度 > 1。此外,乙個迴圈中的所有運動都必須沿著同一方向進行。換句話說,乙個迴圈中不能同時包括向前的運動和向後的運動。

使用雙指標.快指標每次走兩步,慢指標每次走一步,直到兩個指標相遇.相遇時有兩種情況:

class

solution

return

true;}

slow =

getnext

(nums, slow, size)

; fast =

getnext

(nums,

getnext

(nums, fast, size)

, size);}

}return

false;}

intgetnext

(vector<

int>

& pnums,

int index,

int size)

};

注: 關於取模運算

在c++語言中,如果兩個運算元均為正,那麼取模運算的結果也為正數(或為0);如果兩個運算元均為負數,那麼取模運算的結果為負數(或為0);如果只有乙個運算元為負數,那麼取模運算的結果是取決於特定實現的.(在本次測試的電腦中,(-11)%5 = -1)

在python語言中,除法採用的是趨負無窮截尾,即floor除法。取模運算的結果的符號與第二個運算元的符號相同.

如(-11)%5=-11-[(-11)/5]*5=-11-(-3)*5=4。

總結

雙指標解題法

適用於有序陣列

適用於判斷迴圈的情況(迴圈鍊錶)

457 環形陣列迴圈

給定一組含有正整數和負整數的陣列。如果某個索引中的 n 是正數的,則向前移動 n 個索引。相反,如果是負數 n 則向後移動 n 個索引。假設陣列首尾相接。判斷陣列中是否有環。環中至少包含 2 個元素。環中的元素一律 向前 或者一律 向後 你能寫出時間複雜度為 o n 且空間複雜度為 o 1 的演算法...

457 環形陣列迴圈

給定乙個含有正整數和負整數的環形陣列nums。如果某個索引中的數 k 為正數,則向前移動 k 個索引。相反,如果是負數 k 則向後移動 k 個索引。因為陣列是環形的,所以可以假設最後乙個元素的下乙個元素是第乙個元素,而第乙個元素的前乙個元素是最後乙個元素。確定nums中是否存在迴圈 或週期 迴圈必須...

環形陣列例程

乙個簡單的環形陣列例程,參考了網路上的資源。define circlebuffer size 8 unsigned char circlebuffer circlebuffer size unsigned char writeindex 0 unsigned char readindex 0 uns...