编辑代码

#include <iostream>
#include <vector>

int findDuplicate(const std::vector<int>& nums) {
    int n = nums.size() - 1;  // n+1个元素,因此应该是n
    int left = 1;
    int right = n;

    while (left < right) {
        int mid = left + (right - left) / 2;
        int count = 0;

        // 统计小于等于 mid 的元素个数
        for (int num : nums) {
            if (num <= mid) {
                count++;
            }
        }

        // 根据 counted 结果来决定下一步的范围
        if (count > mid) {
            // 重复的数在 left 到 mid 之间
            right = mid;
        } else {
            // 重复的数在 mid + 1 到 right 之间
            left = mid + 1;
        }
    }

    return left;  // left和right最终会指向重复的数
}

int main() {
    std::vector<int> nums = {2, 3, 5, 4, 3, 2, 6, 7}; // 示例输入
    int result = findDuplicate(nums);
    std::cout << "重复的数字是: " << result << std::endl;
    return 0;
}