程式語言 - LeetCode - C++ - 457. Circular Array Loop



參考資訊:
https://www.cnblogs.com/grandyang/p/7658128.html

題目:


解答:

class Solution {
public:
    bool circularArrayLoop(vector<int>& nums) {
        int n = nums.size();
        vector<bool> visited(n);

        for (int i = 0; i < n; ++i) {
            if (visited[i]) {
                continue;
            }

            visited[i] = true;

            int cur = i;
            unordered_map<int, int> mp;
            while (true) {
                int next = ((cur + nums[cur]) % n + n) % n;
                if (next == cur || nums[next] * nums[cur] < 0) {
                    break;
                }

                if (mp.count(next)) {
                    return true;
                }
                mp[cur] = next;
                cur = next;
                visited[next] = true;
            }
        }

        return false;
    }
};