[LeetCode] Find the Duplicate Number
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate element must exist. Assume that there is only one duplicate number, find the duplicate one.
Note:
- You must not modify the array (assume the array is read only).
- You must use only constant extra space.
- Your runtime complexity should be less than
O(n2)
.
二分查找,复杂度 O(nlogn)。
1 class Solution { 2 public: 3 int findDuplicate(vector<int>& nums) { 4 int l = 0, r = nums.size() - 1, m; 5 while (l <= r) { 6 m = l + ((r - l) >> 1); 7 int cnt = 0; 8 for (auto a : nums) if (a <= m) ++cnt; 9 if (cnt <= m) l = m + 1; 10 else r = m - 1; 11 } 12 return l; 13 } 14 };
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步