LeetCode 287.尋找重複數 二分

題意:有一個n+1個數的數組,每個數都小於等於n,有一個數重複了至少一次,找出這個數,要求空間複雜度O(1),且不能更改原數組
思路:根據數組裏的數而不是索引二分,即二分答案,找出數組中某個數的出現次數,如果次數大於這個數,那答案就在這個數前面,否則就在後面

class Solution {
    public int findDuplicate(int[] nums) {
        int l = 1, r = nums.length-1;
        while (l < r) {
            int mid = (l+r) >> 1;
            int cnt = 0;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] <= mid)
                    cnt++;
            }
            if (cnt > mid)
                r = mid;
            else
                l = mid + 1;
        }
        return l;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章