营销型网站策划 建设的考试题,金华网站如何制作,c 网站开发 简单例子,网站建设 推广就选网沃科技目录 题目我的解法解法 题目
给定一个包含 n 1 个整数的数组 nums #xff0c;其数字都在 [1, n] 范围内#xff08;包括 1 和 n#xff09;#xff0c;可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 #xff0c;返回 这个重复的数 。
你设计的解决方案… 目录 题目我的解法解法 题目
给定一个包含 n 1 个整数的数组 nums 其数字都在 [1, n] 范围内包括 1 和 n可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 返回 这个重复的数 。
你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。
我的解法
class Solution {
public:int findDuplicate(vectorint nums) {sort(nums.begin(),nums.end());int l0;int rnums.size()-1;while(lr){int midl(r-l)/2;if(nums[mid]nums[mid1]){rmid;}else if(nums[mid]nums[mid1]){lmid1;}}return nums[l];}
};通过了44个用例但是发现遇到问题就是 无法考虑排序后重复元素在最右边的情况因为判断条件中间数不是重复的话默认会往左边查找。 其实找到第一个最大的元素就可以了。有点像半个爬坡。找到第一个坡 不找峰顶
解法
class Solution {
public:int findDuplicate(vectorint nums) {int n nums.size();int l 1, r n - 1, ans -1;while (l r) {int mid (l r) 1;int cnt 0;for (int i 0; i n; i) {cnt nums[i] mid;}if (cnt mid) {l mid 1;} else {r mid - 1;ans mid;}}return ans;}
};
牛逼以前一直以为二分查找只能查找排好序的数组如果一个数组的统计性质具有单调递增也能查找长见识了。