给定一组含有正整数和负整数的数组。如果某个索引中的 n 是正数的,则向前移动 n 个索引。相反,如果是负数(-n),则向后移动 n 个索引。

假设数组首尾相接。判断数组中是否有环。环中至少包含 2 个元素。环中的元素一律“向前”或者一律“向后”。

示例 1:给定数组 [2, -1, 1, 2, 2], 有一个循环,从索引 0 -> 2 -> 3 -> 0。

示例 2:给定数组[-1, 2], 没有循环。

注意:给定数组保证不包含元素"0"。

你能写出时间复杂度为 O(n) 且空间复杂度为 O(1) 的算法吗?

class Solution {
public:
    bool circularArrayLoop(vector<int>& nums) {
        unordered_map<int, int> m;
        int n = nums.size();
        vector<bool> visited(n, false);
        for (int i = 0; i < n; ++i) {
            if (visited[i]) continue;
            int cur = i;
            while (true) {
                visited[cur] = true;
                int next = (cur + nums[cur]) % n;
                if (next < 0) next += n;
                if (next == cur || nums[next] * nums[cur] < 0) break;
                if (m.count(next)) return true;
                m[cur] = next;
                cur = next;
            }
        }
        return false;
    }
};

457.环形数组循环相关推荐

  1. Java实现 LeetCode 457 环形数组循环

    457. 环形数组循环 给定一个含有正整数和负整数的环形数组 nums. 如果某个索引中的数 k 为正数,则向前移动 k 个索引.相反,如果是负数 (-k),则向后移动 k 个索引.因为数组是环形的, ...

  2. LeetCode 457. 环形数组循环(暴力+快慢指针)

    文章目录 1. 题目 2. 解题 2.1 暴力解题 2.2 快慢指针 1. 题目 给定一个含有正整数和负整数的环形数组 nums. 如果某个索引中的数 k 为正数,则向前移动 k 个索引.相反,如果是 ...

  3. leetcode457. 环形数组循环

    给定一个含有正整数和负整数的环形数组 nums. 如果某个索引中的数 k 为正数,则向前移动 k 个索引.相反,如果是负数 (-k),则向后移动 k 个索引.因为数组是环形的,所以可以假设最后一个元素 ...

  4. [算法] 求环形数组中和值最大子段

    对于非环形数组,求解和值最大子段的方法见之前一遍文章: 对于环形数组,需要考虑最大和值子段越过首尾边界的情况,解决方法比较简单,即将数组处理两遍: 需要注意子段长度不可以超过整个数组长度: 1 #! ...

  5. 环形数组最大子数组之和

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j-1]首尾相邻, ...

  6. 无锁数据结构--理解CAS、ABA、环形数组

    在分布式系统中经常会使用到共享内存,然后多个进程并行读写同一块共享内存,这样就会造成并发冲突的问题, 一般的常规做法是加锁,但是锁对性能的影响非常大. 无锁队列是一个非常经典的并行计算数据结构,它极大 ...

  7. 数组索引必须为正整数或逻辑值_LeeCode457-环形数组循环

    今天有些偷懒了 一天就做了两道算法题 英语没看 专业知识没复习 可能就得从上午的那篇论文被拒开始的吧 题目描述: 给定一个含有正整数和负整数的环形数组 nums. 如果某个索引中的数 k 为正数,则向 ...

  8. 环形数组求最大子数组之和

    环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一 ...

  9. 《团队项目开发之三对一维环形数组的求解》

    <团队项目开发之三对一维环形数组的求解> 设计思想:通过把数组的长度扩大为原来的一倍,相当于新数组是由对原来的数组重复了一遍后而组成的,这样保证了数组以环状的形式,按照数组中每个数字的位序 ...

  10. vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法

    需求:根据主键id来找到对应的数组下标 原本的方法是使用for循环遍历该数组,变量 i 就是下标,问题在于,如果有多重for循环,就会导致性能大大下降,数据也容易出错 因此使用map,让数组(原本是l ...

最新文章

  1. 【ACM】杭电OJ 1002
  2. [android] 异步http框架与实现原理
  3. MIT与TI研究人员已打造出新型防黑RFID芯片
  4. BZOJ4314 倍数?倍数!
  5. ❤JavaScript系列6部曲:语法篇(万字长文)❤
  6. IOS UIImage
  7. VSCode + PYQT5 + QtDesigner
  8. 毕业五年同是程序员为什么差距这么大?他年薪百万,他月薪一万
  9. 联想机房同传日记——2014/09/17
  10. 222Beta多样性限制性排序CPCoA/CCA/RDA/LDA
  11. VS无法定位程序输入点于动态链接库
  12. 计算机怎么盲打键盘,如何练习盲打 键盘盲打指法练习技巧-电脑教程
  13. 微信服务升级——指尖上的超级表格
  14. 西南交通大学linux内核,GitHub - Laotree/SWJTU-Developer: 西南交通大学开发者社区——为交大开发者提供交流的平台...
  15. vo bo po dao pojo dto
  16. CDbCriteria CArrayDataProvider zii.widgets.grid (1)
  17. java 上传图片 / 文件添加水印(png/jpg/pdf)
  18. Python3 迁移怨声载道
  19. 计算机毕业设计Java醋坊定制销售平台(源码+系统+mysql数据库+lw文档)
  20. sql 除法计算一直 为0原因及解决方案

热门文章

  1. Java—读取多层嵌套Json文件的内容并根据索引返回JsonObject
  2. 创建jenkins任务
  3. 在Winform开发框架中实现对数据库的加密支持
  4. 浏览器加载、渲染过程总结
  5. 大数据要如何提高 才能满足智慧城市需求?
  6. 源码安装php5.5
  7. mybatis同时查询未知个数的表中数据(表名做为参数传递,联合查询union)
  8. [转]Birdfont 2.10 发布,字体编辑器
  9. spring 中beanFactory和ApplicationContext的区别
  10. 设计网际网络的地址标准