[leetcode]circular-array-loop 环形数组是否存在循环

. - 力扣(LeetCode)

复制代码
class Solution {
public:
    bool circularArrayLoop(vector<int>& nums) {
        int n = nums.size();
        auto next = [&](int cur) {
            return ((cur + nums[cur]) % n + n) % n; // 保证返回值在 [0,n) 中
        };

        for (int i = 0; i < n; i++) {
            if (!nums[i]) {
                continue;
            }
            int slow = i, fast = next(i);
            // 判断非零且方向相同
            while (nums[slow] * nums[fast] > 0 && nums[slow] * nums[next(fast)] > 0) {
                if (slow == fast) {
                    if (slow != next(slow)) {
                        return true;
                    } else {
                        break;
                    }
                }
                slow = next(slow);
                fast = next(next(fast));
            }
            int add = i;
            while (nums[add] * nums[next(add)] > 0) {
                int tmp = add;
                add = next(add);
                nums[tmp] = 0;
            }
        }
        return false;
    }
};
相关推荐
小范自学编程3 小时前
算法训练营Day44 - 动态规划part12
算法·动态规划
。。,……~3 小时前
RGB-IR融合算法CDDFUSE理解+复现
算法
小刘的AI小站3 小时前
L9 Policy Gradient Method (二)
算法·机器学习·强化学习
WolfGang0073213 小时前
代码随想录算法训练营 Day21 | 回溯算法 part03
数据结构·算法
tankeven3 小时前
HJ152 取数游戏
c++·算法
程序员Shawn3 小时前
【机器学习 | 第六篇】- 机器学习
人工智能·算法·机器学习·集成学习
深邃-3 小时前
数据结构-队列
c语言·数据结构·c++·算法·html5
Rhystt3 小时前
代码随想录算法训练营第六十天|多余的边?从基础到进阶!
开发语言·c++·算法·图论
2301_810160953 小时前
C++中的策略模式进阶
开发语言·c++·算法
keep intensify3 小时前
二叉树的直径
数据结构·算法·深度优先