这题核心是在二分移动哪个边界上
我们最终会以l=r作为终止条件,每一次判断mid,我们都会移动其中一端的边界,因为这道题中如果满足nums[mid] == nums[mid ^ 1]的条件,代表答案在(mid, r]中,肯定不包含mid,所以我们可以将l修改为mid+1
class Solution {
public int singleNonDuplicate(int[] nums) {
int n = nums.length;
int l = 0, r = n - 1;
while (l < r) {
int mid = l + r >>> 1;
if (nums[mid] == nums[mid ^ 1]) l = mid + 1;
else r = mid;
}
return nums[l];
}
}

本文解析了一段关于使用二分搜索算法在整数数组中定位唯一重复元素的Java代码。通过逐步移动边界,当找到相等元素对时,边界会偏向右边界,最终返回重复元素所在范围的左端。核心在于理解边界更新策略。
489

被折叠的 条评论
为什么被折叠?



