算法代码

寻找重复数

2020-09-12  本文已影响0人  windUtterance

题目描述
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。

示例
输入: [3,1,3,4,2]
输出: 3

Java代码

class Solution {
    public int findDuplicate(int[] nums) {
        int len = nums.length;
        int left = 1;
        int right = len - 1;

        while(left < right) {
            int mid = (left + right) >>> 1;
            int count = 0;
            for(int num : nums) {
                if(num <= mid) count += 1;
            }

            //根据抽屉原理,小于等于4的个数如果严格大于4,那么重复元素一定会出现在[1,4]中
            if(count > mid) right = mid;
            else left = mid + 1;
        }
        return left;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读