目录

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
}
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
梭七y2 小时前
【力扣hot100题】(096)多数元素
算法·leetcode·职场和发展
余瑾瑜3 小时前
如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
开发语言·后端·golang
o0o_-_3 小时前
【golang/jsonrpc】go-ethereum中json rpc初步使用(websocket版本)
websocket·golang·json-rpc
ricky_fan5 小时前
Leetcode39:组合总和——回溯算法
开发语言·c++·leetcode
爱看烟花的码农5 小时前
LeetCode 热题 8/100打卡
c++·python·算法·leetcode
探索未来 航行现在6 小时前
Go语言--语法基础4--基本数据类型--整数类型
开发语言·后端·golang
ゞ 正在缓冲99%…7 小时前
leetcode167.两数之和||
java·算法·leetcode·双指针
梭七y7 小时前
【力扣hot100题】(093)最长公共子序列
算法·leetcode·职场和发展
龙萌酱8 小时前
力扣每日打卡 50. Pow(x, n) (中等)
前端·javascript·算法·leetcode
飞川撸码9 小时前
【LeetCode 热题100】二叉树遍历入门:从中序遍历到层序与右视图(力扣94 / 102/199)(Go语言版)
算法·leetcode·golang·二叉树