您的位置:首页 > 其它

287.leetcode Find the Duplicate Number(hard)[数组 重复元素]

2016-08-05 10:35 519 查看
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.
题目的含义是要找到数组中唯一重复的元素,方法一是采用首先排序然后检查相邻元素的方法,但是时间复杂度为O(nlogn),还有另外一种方法因为元素都是在1到n的,因此可以采用位图的形式,每个数字用1bit表示是否重复。
class Solution {
public:
int findDuplicate(vector<int>& nums) {
if(nums.size() <=1) return -1;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-1;i++)
{
if(nums[i] == nums[i+1])
return nums[i];
}
return -1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: