剑指Offer 03 数组中重复的数字
2021-05-01 01:27
标签:number 示例 find == 存在 重复 范围 pre nlogn 找出数组中重复的数字。 示例 1: 输入: 限制: 2
1.排序后遍历 先对数字进行排序,然后遍历就可以得出结果,时间复杂度为O(nlogn)。 2.哈希表 使用哈希表记录出现过的数字,遇到新数时如果哈希表中已经存在该数,则找到。 时间复杂度为O(n),空间复杂度为O(n)。 3.利用所有数都在0-n-1的区间 如果没有重复的数,那么所有数都应该在和它们值相等的下标上,那么我们从头循环,遇到一个数就把它交换到它对应的坐标,当遇到该坐标已经有目标数的时候就找到了重复的数。 剑指Offer 03 数组中重复的数字 标签:number 示例 find == 存在 重复 范围 pre nlogn 原文地址:https://www.cnblogs.com/rookiez/p/13221768.html
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
1 class Solution {
2 public:
3 int findRepeatNumber(vectorint>& nums) {
4 int n=nums.size();
5 int i=0;
6 while(in){
7 if(nums[i]!=i){
8 if(nums[i]==nums[nums[i]])
9 return nums[i];
10 swap(nums[i],nums[nums[i]]);
11 }
12 else i++;
13 }
14 return 0;
15 }
16 };
文章标题:剑指Offer 03 数组中重复的数字
文章链接:http://soscw.com/index.php/essay/80642.html