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
}
相关推荐
期末考复习中,蓝桥杯都没时间学了5 小时前
力扣刷题19
算法·leetcode·职场和发展
桂花很香,旭很美6 小时前
[7天实战入门Go语言后端] Day 2:用 Go 写一个 HTTP 服务——net/http 入门
http·golang·xcode
踩坑记录6 小时前
递归回溯本质
leetcode
好学且牛逼的马7 小时前
【Hot100|25-LeetCode 142. 环形链表 II - 完整解法详解】
算法·leetcode·链表
样例过了就是过了9 小时前
LeetCode热题100 和为 K 的子数组
数据结构·算法·leetcode
Frostnova丶9 小时前
LeetCode 67. 二进制求和
算法·leetcode
昌兵鼠鼠9 小时前
LeetCode Hot100 哈希
学习·算法·leetcode·哈希算法
脏脏a9 小时前
【优选算法・双指针】以 O (n) 复杂度重构数组操作:从暴力遍历到线性高效的范式跃迁
算法·leetcode·双指针·牛客·优选算法
kamisama_zhu9 小时前
LeetCode 热题100快速通关指南(附模板) (优化完整版,真人心得版,持续更新)
算法·leetcode·职场和发展
蒟蒻小袁11 小时前
力扣hot-100(一刷自用版)
leetcode·哈希算法·散列表