Hard 287题 Find the Duplicate Number
来源:互联网 发布:百度云nginx配置 编辑:程序博客网 时间:2024/04/29 16:51
Question:
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.
Note:
- You must not modify the array (assume the array is read only).
- You must use only constant, O(1) extra space.
- Your runtime complexity should be less than
O(n2)
. - There is only one duplicate number in the array, but it could be repeated more than once.
This is a bad solution....but it works....
public class Solution { public int findDuplicate(int[] nums) { int n=nums.length; int i=0; int j=0; if(n<=2) return nums[0]; int ans=0; for(i=0;i<=n-2;i++) { for(j=i+1;j<=n-1;j++) { if(nums[i]-nums[j]==0){ ans=nums[i];break;} } } return ans; }}
快慢指针找环 参考了这个~http://www.jianshu.com/p/ce7f035daf74 写的好清楚
public class Solution { public int findDuplicate(int[] nums) { int fast=0; int slow=0; if(nums == null || nums.length < 2) { return -1; } while(true) { slow=nums[slow]; fast=nums[nums[fast]]; if(slow==fast) break; } fast=0; while(true) { slow=nums[slow]; fast=nums[fast]; if(slow==fast) break; } return fast; }}
还可以用二分法做。。据说也很棒!我觉得有点难度,巧妙用了nums[i]和i,抽屉原理
int n=nums.length; int low=0; int high=n-1; while(low<high) { int mid=(high-low)/2+low; int c=count(nums,mid); if(c<=mid) { low = mid+1; } else { high = mid; } } return low; } public int count(int nums[], int mid) { int ans=0; for(int i=0;i<=nums.length-1;i++) { if(nums[i]<=mid) ans++; } return ans;
0 0
- Hard 287题 Find the Duplicate Number
- 287. Find the Duplicate Number #Hard
- Find the Duplicate Number【287】
- 287Find the Duplicate Number
- 287 Find the Duplicate Number
- Hard-题目2:287. Find the Duplicate Number
- 287.leetcode Find the Duplicate Number(hard)[数组 重复元素]
- Leetcode 287. Find the Duplicate Number (Hard) (cpp)
- Find the Duplicate Number
- Find the Duplicate Number
- Find the Duplicate Number
- Find the Duplicate Number
- Find the Duplicate Number
- Find the Duplicate Number
- Find the Duplicate Number
- Find the Duplicate Number
- Find the Duplicate Number
- Find the Duplicate Number
- ruby升级的坑
- 第五周项目—Error
- Ubuntu 软件安装失败 提示not fully installed or removed
- sql语句中inner join,left join,right join,full join,cross join之间的区别
- 使用Executors创建和管理线程
- Hard 287题 Find the Duplicate Number
- 第四周项目1-建立单链表
- 第五周项目3- 括号的搭配
- 【第5周 项目2-建立链栈算法库】
- 第五周项目二(建立链栈算法库)
- url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介
- Tomcat7优化配置
- CSDN不使用Crtl+C/V转载博客
- 常用js框架之vue.js(深入三:组件1)