网站仿制 个人,天津葛沽 网站建设公司,新乡市延津县建设局网站,wordpress 跳转特效287. 寻找重复数
给定一个包含 n 1 个整数的数组 nums #xff0c;其数字都在 [1, n] 范围内#xff08;包括 1 和 n#xff09;#xff0c;可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 #xff0c;返回 这个重复的数 。你设计的解决方案必须 不修改 数组…287. 寻找重复数
给定一个包含 n 1 个整数的数组 nums 其数字都在 [1, n] 范围内包括 1 和 n可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 返回 这个重复的数 。你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。对数字范围 [1, n] 进行二分而不是对数组本身排序。
统计数组中小于等于中间值 mid 的数字个数
如果个数超过 mid说明重复数字在 [1, mid] 范围内。
否则重复数字在 [mid 1, n] 范围内。这题要领悟这个思想所以起始是从1到n-1找的。因为有n个数不重复的数就是1到n-1重复了一个数之后才有的n个数。后面代码中的各种等号rightmid这跟传统二分还是不太一样就是要理解上面的解法才知道为什么这样写。
class Solution {public int findDuplicate(int[] nums) {int n nums.length;int left 1, right n - 1;while (left right) {int count 0;int mid (left right) / 2;for (int num : nums) {if (num mid) {count;}}if (count mid) {right mid;} else {left mid 1;}}return left;}
}