问题:数组中重复的数字,且数值小于数字size-1
- 方法一:利用hash,遇到重复的数字时就返回
class Solution { public: int findRepeatNumber(vector<int>& nums) { unordered_map<int,bool>mp; for(auto i : nums){ if(mp[i]) return i; mp[i] = true; } return -1; } };
方法二:利用字典的性质,因数值与索引是一一对应的关系,所以将数值进行交换,达到nums[i] == i ;当nums[ nums[i] ] == nums[i] 时,即为重复出现的数字,返回。不相等就交换,并且每交换一次,就会有一个索引号和数值对应好,直到当前的索引号也对应好,执行i++,
class Solution { public: int findRepeatNumber(vector<int>& nums) { int i = 0; while(i<nums.size()){ if(nums[i] == i){ i++; continue; } if(nums[nums[i]] == nums[i]){ return nums[i]; } swap(nums[i],nums[nums[i]]); } return -1; } };
方法三:先排序sort(nums.begin(),nums.end()); 再遍历一遍数组,比较相邻两个数值,遇到相等的即为重复的数值,返回。
标签:数字,nums,重复,数值,int,数组 From: https://www.cnblogs.com/xuan01/p/17116095.html