Leetcode 287.寻找重复数

题目描述
Leetcode
解题思路:
假设输入的数组为A=[1,3,4,2,2],由题目可知,该数组原来的形式为S=[1,2,3,4,_].

因此我们可以得到该数组的最大值n和最小值1.

遍历数组S,小于等于1的个数为1,小于等于2的个数为2,…,小于等于4的个数为4.

但是由于数组中加入了重复的数,

遍历数组A中可以发现,小于等于1的个数为1,小于等于2的个数为3,小于等于3的个数为4,…

说明重复的数就存在小于等于2的范围内,因此要如何定位这个重复数?

二分法

low=1.high=4,mid=2,nums<=2–>count=3>mid=2,说明在小于等于2的范围内存在重复数

low=1,high=mid,mid=1,nums<=1–>count=1<=mid=1,说明不存在重复数,为什么要小于,因为存在重复数,该数可能被代替了

low=mid=2,high=2,–>low==mid循环结束

#include
#include
using namespace std;

class Solution {
public:
    int findDuplicate(vector& nums) {

        int low = 1, high = nums.size() - 1, mid;
        int count;
        while(low nums;
    int x;
    while(1)
    {
        cin >> x;
        nums.push_back(x);
        if(cin.get()=='\n')
            break;
    }
    Solution sl;
    int repeat = sl.findDuplicate(nums);
    cout << repeat << endl;
    return 0;
}

你可能感兴趣的:(Leetcode刷题,leetcode,算法,数据结构)