寻找重复数—leetcode287
生活随笔
收集整理的這篇文章主要介紹了
寻找重复数—leetcode287
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
給定一個包含?n + 1 個整數(shù)的數(shù)組?nums,其數(shù)字都在 1 到 n?之間(包括 1 和 n),可知至少存在一個重復(fù)的整數(shù)。假設(shè)只有一個重復(fù)的整數(shù),找出這個重復(fù)的數(shù)。
示例 1:
輸入: [1,3,4,2,2]
輸出: 2
示例 2:
輸入: [3,1,3,4,2]
輸出: 3
說明:
不能更改原數(shù)組(假設(shè)數(shù)組是只讀的)。
只能使用額外的 O(1) 的空間。
時間復(fù)雜度小于 O(n2) 。
數(shù)組中只有一個重復(fù)的數(shù)字,但它可能不止重復(fù)出現(xiàn)一次。
?
思路:二分查找,如果小于等于mid值的count>mid,那么重復(fù)數(shù)一定在left~mid之間,反之則在mid+1~right之間
class Solution { public:int findDuplicate(vector<int>& nums) {int num = nums.size()-1;int left = 1; int right = num;while(left<right){int mid = (left+right)>>1;int count = 0;for(int i=0;i<=num;++i){if(nums[i]<=mid){count++;}}if(count>mid){right = mid;}else{left = mid+1;}}return right;} };?
總結(jié)
以上是生活随笔為你收集整理的寻找重复数—leetcode287的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arm汇编解析—tengine wino
- 下一篇: 比特位计数—leetcode338