一个长度为 n + 1 的整形数组,其中的数字都在 1 到 n 之间,包括 1 和 n ,可知至少有一个重复的数字存在。假设只有一个数字重复,找出这个重复的数字。
注意:
    不能更改数组内容(假设数组是只读的)。
    只能使用恒定的额外空间,即要求空间复杂度是 O(1) 。
    时间复杂度小于 O(n2)
    数组中只有一个数字重复,但它可能不止一次重复出现。
详见:https://leetcode.com/problems/find-the-duplicate-number/description/

方法一:

class Solution {
public:
int findDuplicate(vector<int>& nums) {
int left=1,right=nums.size()-1;
while(left<right)
{
int mid=left+(right-left)/2;
int cnt=0;
for(int val:nums)
{
if(val<=mid)
{
++cnt;
}
}
if(cnt<=mid)
{
left=mid+1;
}
else
{
right=mid;
}
}
return left;
}
};

方法二:

class Solution {
public:
int findDuplicate(vector<int>& nums) {
int s=0,f=0,t=0;
while(true)
{
s=nums[s];
f=nums[nums[f]];
if(s==f)
{
break;
}
}
while(true)
{
s=nums[s];
t=nums[t];
if(s==t)
{
break;
}
}
return s;
}
};

参考:https://www.cnblogs.com/grandyang/p/4843654.html

最新文章

  1. iis7+ 禁止IP访问设置方法
  2. java Channel filp compact
  3. mfs-管理员
  4. linux 如何让程序在开机时启动,关机前关闭
  5. 使用Animation实现Button的透明度Opacity变化
  6. 编译linux内核时出错
  7. virtualbox修改主机名
  8. bolt_storage.go
  9. k8s应用机密信息与配置管理(九)--技术流ken
  10. Web项目也能一键打包Android、IOS
  11. linux搭建所遇到的坑elasticsearch-6.3.0
  12. leetcode感想
  13. Arrlist的重要方法重写
  14. Senparc.Weixin.MP SDK 微信公众平台开发教程(十九):MessageHandler 的未知类型消息处理
  15. mysql数据统计技巧备忘录
  16. js中html拼接
  17. 求最小生成树的kruskal算法
  18. JVM调优的总结
  19. Equinox P2 介绍(一)Getting Start
  20. 【转】C# 二维码生成

热门文章

  1. zoj3988 Prime Set
  2. Remove Element(第一种方法参考别人)
  3. mysql配置文件my.ini的修改问题
  4. Samba完整篇 ubuntu 10.04
  5. AutoCAD如何打印
  6. rsh 无秘钥登陆配置
  7. AES加密算法的C++实现
  8. ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2
  9. 《炉石传说》架构设计赏析(4):Asset管理
  10. 2016/1/18 Java开发中的23种设计模式详解(转)