题意:

  有一个含有n+1个元素的数组,元素值是在1~n之间的整数,请找出其中出现超过1次的数。(保证仅有1个出现次数是超过1的数)

思路:

  方法一:O(nlogn)。根据鸽笼原理及题意,每次如果<=k的数超过了k个,那么答案必定在[1,k]。可以用二分枚举答案来解决。

 1 bool left(vector<int>& nums,int tar)//是否在左边
 2 {
 3     int cnt=0;
 4     for(int i=0; i<nums.size(); i++)
 5         if(nums[i]<=tar)
 6             cnt++;
 7     return cnt>tar;
 8 }
 9
10 int findDuplicate(vector<int>& nums)
11 {
12     int L=1, R=nums.size()-1;
13     while(L<R)
14     {
15         int mid=R-(R-L+1)/2;
16         if( left(nums,mid)==true )    R=mid;
17         else    L=mid+1;
18     }
19     return R;
20 }

AC代码

  方法二:O(n)。将数组nums看成是一个链表,next[i]表示点i的后继(0也是一个点,因为0也是下标)。根据题意,此链表必定有且仅有一个简单环存在,这样就类似于Linked List Cycle II ,只是会多余出部分的链,但是这不会影响到这个模型,从0点出发依然存在这样的一个模型,只是环的接口处不会是0而已。要注意两个指针的起始位置,必须保证fast=2*slow。

 1 class Solution {
 2 public:
 3     int findDuplicate(vector<int>& nums)
 4     {
 5         int slow=0, fast=nums[0];
 6         while(fast!=slow)
 7         {
 8             slow=nums[slow];
 9             fast=nums[nums[fast]];
10         }
11         fast=0;
12         slow=nums[slow];
13         while(fast!=slow)
14         {
15             slow=nums[slow];
16             fast=nums[fast];
17         }
18         return fast;
19     }
20 };

AC代码

转载于:https://www.cnblogs.com/xcw0754/p/4924298.html

LeetCode Find the Duplicate Number 找重复出现的数(技巧)相关推荐

  1. LeetCode 287---Find the Duplicate Number

    问题链接:LeetCode 287-Find the Duplicate Number 题目大意 : 找出序列中唯一一个重复出现的数字,且只能使用o(1)的额外空间 实现代码如下: public cl ...

  2. D19:Duplicate Number(重复数字,翻译+题解)

    原题:OpenJudge - 19:Duplicate Number 翻译: 描述:给定一个N个数的序列,求一个在序列中的至少出现2次的数A: 输入:第一行:一个不大于1000的正整数N : 第二行: ...

  3. LeetCode 316 Remove Duplicate Letters(删除重复字符)

    问题:给出一个字符串,要求删除重复字符,字典序是最小并且保持字符的相对位置. 思路: 方法一,使用递归算法,在出现只出现一次的前缀字符串中确定最小字符,然后在剩下的子串中递归. 方法二,使用栈做,先记 ...

  4. LeetCode第九题—— Palindrome Number(判断回文数)

    题目描述 Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same ...

  5. 287. **Find the Duplicate Number

    287. **Find the Duplicate Number https://leetcode.com/problems/find-the-duplicate-number/description ...

  6. LeetCode 287. Find the Duplicate Number (时间复杂度O(n)) + 链表判断环

    LeetCode 287. Find the Duplicate Number 暴力解法 时间 O(nlog(n)),空间O(n),按题目中Note"只用O(1)的空间",照理是过 ...

  7. LeetCode.287 Find the Duplicate Number

    题目: Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), ...

  8. LeetCode 287. Find the Duplicate Number

    题目: Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), ...

  9. LintCode Find the Duplicate Number

    Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...

最新文章

  1. c语言程序中的基本功能,c语言程序中的基本功能模块为什么?
  2. 【原创】分布式之redis复习精讲
  3. Tuxedo学习门户网站
  4. 为移动端网页构造快速响应按钮
  5. 废弃P-value,还是学学如何评估统计检验结果?
  6. 使用switch实现多选
  7. ios-UIViewController和魔态视图的应用以及设备支持方向的设置
  8. 一键换机显示二维码错误_【丽迪资讯】装路由器,忘记上网账号跟密码?别担心360amp;磊科智能路由器一键换机轻松搞定!...
  9. mysql事件【定时器】
  10. 【网络技术题库整理5】网络安全技术
  11. 计算机时间无法保存更改,怎样更改电脑右下角时间设置 不能修改怎么办
  12. 计算机图书管理系统测试用例,图书管理系统测试用例设计.doc
  13. 浙江师范大学c语言函数实验答案,C语言实验浙江师范大学8-2 D阵列+答案.doc
  14. 手机NFC是什么?怎么使用?
  15. 如何使用HTML制作tab选项卡
  16. Scrapy爬取IT桔子死亡公司库及资本机构数据
  17. 关于daemonize()
  18. A. Déjà Vu
  19. yso之URLDNS链
  20. matlab dat文件乱码,求助MATLAB读取dat数据问题

热门文章

  1. html透明度_学好Web前端开发,必要了解的HTML+CSS的技巧有哪些
  2. yum 错误:Invalid configuration value: failovermethod=priority
  3. 【Nginx】错误: [emerg] “proxy_set_header“ directive is not allowed here in D:\sde\phpstudy_pro\...
  4. Linux 分割、合并文件
  5. 【git】【eclipse】 误操作“忽略(ignore)文件”,取消忽略文件操作
  6. json传输二进制的方案(python版)
  7. java 设计模式_快速上手Java设计模式之简介
  8. 新华字典mysql_JAVA面试(1)Mysql
  9. 花木兰到底好看不,我用Python爬取了几万条评论!
  10. 提前(qian)庆祝 “1024程序员节” ,价值 1500 元的京东卡免费送!