Golang | Leetcode Golang题解之第457题环形数组是否存在循环

题目:

题解:

Go 复制代码
func circularArrayLoop(nums []int) bool {
    n := len(nums)
    next := func(cur int) int {
        return ((cur+nums[cur])%n + n) % n // 保证返回值在 [0,n) 中
    }

    for i, num := range nums {
        if num == 0 {
            continue
        }
        slow, fast := i, next(i)
        // 判断非零且方向相同
        for nums[slow]*nums[fast] > 0 && nums[slow]*nums[next(fast)] > 0 {
            if slow == fast {
                if slow == next(slow) {
                    break
                }
                return true
            }
            slow = next(slow)
            fast = next(next(fast))
        }
        add := i
        for nums[add]*nums[next(add)] > 0 {
            tmp := add
            add = next(add)
            nums[tmp] = 0
        }
    }
    return false
}
相关推荐
米粒14 分钟前
力扣算法刷题 Day 16
算法·leetcode·职场和发展
重生之后端学习4 分钟前
31. 下一个排列
数据结构·算法·leetcode·职场和发展·排序算法·深度优先
Frostnova丶4 分钟前
LeetCode 3212. 统计X和Y出现次数相等的子矩阵数量
算法·leetcode·矩阵
We་ct6 分钟前
LeetCode 53. 最大子数组和:两种高效解法(动态规划+分治)
前端·算法·leetcode·typescript·动态规划·分治
shehuiyuelaiyuehao7 分钟前
算法9,滑动窗口,长度最小的子数组
数据结构·算法·leetcode
sheeta19989 分钟前
LeetCode 每日一题笔记 日期:2025.03.18 题目:3070.元素和小于等于k的子矩阵的数目
笔记·leetcode·矩阵
robch1 小时前
golang container/heap 是一个为任意类型实现堆(优先队列)接口的包
数据结构·算法·golang
96771 小时前
力扣面试经典150 88. 合并两个有序数组 归并排序的merge函数
算法·leetcode·面试
leonkay10 小时前
Golang语言闭包完全指南
开发语言·数据结构·后端·算法·架构·golang
IronMurphy12 小时前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode