[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;
    }
};
相关推荐
刘永鑫Adam17 小时前
Nature Methods | 诸奇赟组-Scikit-bio:用于生物组学数据分析的基础Python库
人工智能·python·算法·机器学习·数据分析
hweiyu0017 小时前
查找算法:分类及特点
算法·分类
youngee1117 小时前
hot100-51搜索二维矩阵
数据结构·算法·矩阵
byzh_rc18 小时前
[模式识别-从入门到入土] 支持向量积SVM
数据库·人工智能·算法
im_AMBER18 小时前
Leetcode 86 【二分查找】在排序数组中查找元素的第一个和最后一个位置
笔记·学习·算法·leetcode
有一个好名字18 小时前
力扣:种花问题
算法·leetcode·职场和发展
会编程是什么感觉...18 小时前
算法 - Impedance Track 阻抗跟踪笔记
算法·bms·电量计
sprintzer18 小时前
力扣12.16-12.25数组刷题
算法·leetcode·职场和发展
点云侠18 小时前
基于选权迭代法的空间平面拟合
线性代数·算法·平面
AndrewHZ18 小时前
【图像处理基石】VR的眩晕感是如何产生的?
图像处理·算法·计算机视觉·vr·cv·立体视觉·眩晕感