[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;
    }
};
相关推荐
C雨后彩虹几秒前
猴子爬山问题
java·数据结构·算法·华为·面试
y = xⁿ1 分钟前
20天速通LeetCodeday13:关于回溯
算法
计算机安禾4 分钟前
【c++面向对象编程】第1篇:从C到C++:面向对象编程思想入门
c语言·c++·算法
Master_oid4 分钟前
机器学习41:利用KNN算法实现手写数字识别
深度学习·算法·机器学习
OYangxf14 分钟前
力扣hot100【子串专题】
算法·leetcode·职场和发展
WL_Aurora20 分钟前
Python 算法基础篇之元组与列表
python·算法
Brilliantwxx21 分钟前
【算法题】递归树+哈希表+分治异或+双指针
开发语言·c++·笔记·算法
yugi98783821 分钟前
经典三维表面重建算法(C语言实现)
c语言·开发语言·算法
无限进步_24 分钟前
【C++】智能指针族谱:auto_ptr、unique_ptr、shared_ptr
java·开发语言·数据结构·c++·算法
Brilliantwxx25 分钟前
【C++】Stack和Queue(初认识和算法题OJ)
开发语言·c++·笔记·算法