1. 题目

给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1 到 n (包括边界),保证至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。

样例 1:
输入:
[5,5,4,3,2,1]
输出:
5样例 2:
输入:
[5,4,4,3,2,1]
输出:
4

注意事项
1.不能修改数组(假设数组只能读)
2.只能用额外的O(1)的空间
3.时间复杂度小于O(n2)
4.数组中只有一个重复的数,但可能重复超过一次

2. 解题

  • 把数值作为下标,跟下标处的数交换,直到相等为止
class Solution {public:int findDuplicate(vector<int> &nums) {int i = 0;while(nums[i] != nums[nums[i]])swap(nums[i], nums[nums[i]]);return nums[i];}
};

or 位运算swap

class Solution {public:int findDuplicate(vector<int> &nums) {int i = 0;while(nums[i] != nums[nums[i]])myswap(nums[i], nums[nums[i]]);return nums[i];}inline void myswap(int& a, int& b){a ^= b ^= a ^= b;}
};

100% 数据通过测试
总耗时 1561 ms
您的提交打败了 90.80% 的提交!

  • 快慢指针
class Solution {public:int findDuplicate(vector<int> &nums) {int fast = 0;int slow = 0;do{fast = nums[nums[fast]];slow = nums[slow];}while(fast != slow);slow = 0;while (slow != fast) {fast = nums[fast];slow = nums[slow];}return fast;}
};
  • 标记为负数法
class Solution {public:int findDuplicate(vector<int> &nums) {int idx, i;for(i = 0; i < nums.size(); ++i){idx = abs(nums[i]);if(nums[idx] > 0)nums[idx] = -nums[idx];elsereturn idx;}return -1;}
};

LintCode 633. 寻找重复的数(这个题要复习)相关推荐

  1. LeetCode/LintCode 题解丨一周爆刷双指针:寻找重复的数

    描述 给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1 到 n (包括边界). 保证至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 不能修改数组(假设数组只能读) ...

  2. leetcode 寻找重复的数633 python

    给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1 到 n (包括边界),保证至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 1.不能修改数组(假设数组只能读) 2 ...

  3. python 寻找重复的数

    给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间,包括 1 和 n ,可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 示例 1: 输入: [1,3 ...

  4. 领扣LintCode问题答案-58. 四数之和

    领扣LintCode问题答案-58. 四数之和 目录 58. 四数之和 鸣谢 58. 四数之和 给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d) ...

  5. 领扣LintCode问题答案-57. 三数之和

    领扣LintCode问题答案-57. 三数之和 目录 57. 三数之和 鸣谢 57. 三数之和 给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三 ...

  6. Leecode:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数

    题目 /** * 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. * 示例 ...

  7. 找出重复的数java_剑指offer:1.找出数组中重复的数(java版)

    数组中重复的数: 题目:找出数组中重复的数, 题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的. 也不知道每个数字重复几次.请找 ...

  8. LintCode 16. 带重复元素的排列

    写在前面:这题和全排列不含重复元素的那题几乎一样,我比较垃圾,就用HashSet去掉了重复的元素但是看了九章算法的答案也没看懂,他写的很有感觉. 用了hash,本来想着怎么写hashcode()和eq ...

  9. 剑指offer之数组中重复的数(Java实现)

    数组中重复的数 NowCoder 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的, 也不知道每个数字重复几次.请找出数 ...

最新文章

  1. 每日一皮:自己运行正常,测试一测就有bug
  2. 用神经网络分类3*3矩阵
  3. 云原生生态周报 Vol. 17 | Helm 3 发布首个 beta 版本
  4. 上海图书馆 计算机软件,上海图书馆上海科技情报研究所招聘信息
  5. java npm install_npm install不构建供应商可执行文件
  6. php 合并数组 效率,PHP将两个关联数组合并函数-增高函数效率
  7. 简历人才库系统_人才招聘简历的3种选择
  8. macos下卸载软件
  9. h3c服务器r690修改启动顺序,H3C UIS R690 G2服务器 CPU快速入门-6W101
  10. 无约束最优化(三) 拟Newton法
  11. 2022年美赛成绩什么时候出,2022美赛思路与注意事项。
  12. GB2312、GBK、UTF-8 如何转换
  13. HikariCP源码分析
  14. 精选16款超精美的XP登录界面下载
  15. Android虚拟机多开检测
  16. sparkStreaming常见问题
  17. windows资源管理器关闭了怎么打开
  18. 高效短眠的10个好处及如何进行高效的睡眠
  19. 程序物语(七):项目经理预成长
  20. 明年放假时间表总共29天7个节假日

热门文章

  1. 华为消息推送 有透传通道吗_求解在推送用透传消息-使用厂商通道(我用的是基座测试) 用手机测试出现了“clientId离线”问题...
  2. mysql对表中添加属性_菜鸟笔记—数据分析师MySQL篇(一)
  3. include包含头文件的语句中,双引号和尖括号的区别
  4. C语言宏定义中UL的含义
  5. 从集合中选出一些元素组成子集合,使得这些子集合符合某种约束
  6. android listview中item倒计时,GitHub - TangAnna/ListViewTimer: 列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)...
  7. Mysql安装后在服务里找不到和服务启动不起来的解决方法
  8. 编译原理(五)自底向上分析之算符优先分析法
  9. 运行Myeclipse发生这事这是怎么回事,大神们
  10. 快速替换图片的组合-AE-样片!