0287. 寻找重复数 #
- 标签:位运算、数组、双指针、二分查找
- 难度:中等
题目大意 #
给定一个包含 n+1 个整数的数组 nums,里边包含的值都在 1~n 之间。假设 nums 中只存在一个重复的整数,要求找出这个重复的数。
要求使用空间复杂度为常数级 O(1) ,时间复杂度小于 $O(n^2)$ 的解决方法。
解题思路 #
利用二分查找的思想。用两个指针 left,right。left 指向 1,right 指向 n。将区间 [1, n] 分为 [left, mid] 和 [mid + 1, right] 。对于中间数 mid,统计 nums 中小于等于 mid 的数个数 cnt。如果 cnt 小于等于 mid,则重复数一定不会出现在左侧区间,那么从右侧区间开始搜索。若 cut 大于 mid,则重复数出现在左侧区间,则从左侧区间开始搜索。
代码 #
|
|