[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;
    }
};
相关推荐
冰冰冰泠泠泠2 分钟前
FLOW MATCHING FOR GENERATIVE MODELING 阅读笔记
笔记·算法·机器学习
zhyjhacker22 分钟前
C++ primer plus 第17 章 输入、输出和文件:用cout进行格式化
开发语言·c++·算法
神马都会亿点点的毛毛张31 分钟前
LeetCode刷题笔记 | 3 | 无重复字符的最长子串 | 双指针 | 滑动窗口 | 2025兴业银行秋招笔试题 | 哈希集合
java·数据结构·笔记·算法·leetcode·哈希算法·集合
bug菌¹32 分钟前
需求高精度PT100设计电路和算法
java·数据库·驱动开发·算法·硬件工程
Evand J42 分钟前
MATLAB代码|蚁群算法|计算二元函数最小值
开发语言·算法·matlab
华农第一蒟蒻1 小时前
力扣每日一题2024.8.5
算法·leetcode
一个很不专业的编程小白1 小时前
浅谈简单的搜索算法(c++)
c++·算法·深度优先
我不是彭于晏丶1 小时前
(leetcode学习)46. 全排列
数据结构·c++·学习·算法·leetcode
love learning1 小时前
算法训练,项目
算法
从雨幼刀1 小时前
AtCoder Beginner Contest 365
算法