标签:
题目:
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:
O(n2)
.解析:
没做出来,用2分法,当小于等于n/2的数字个数大于n/2,说明多余的数字在小的部分,否则在大的部分,时间复杂度是O(nlogn)
1 class Solution { 2 public: 3 int findDuplicate(vector<int>& nums) { 4 int n=nums.size()-1; 5 int low=1; 6 int high=n; 7 int mid; 8 while(low<high){ 9 mid=(low+high)/2; 10 int count=0; 11 for(int num:nums){ 12 if(num<=mid) count++; 13 } 14 if(count>mid) high=mid; 15 else low=mid+1; 16 } 17 return low; 18 } 19 };
标签:
原文地址:http://www.cnblogs.com/raichen/p/4968229.html