题目描述:
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
输入:
[2,3,1,0,2,5,3]
输出:
2or3
//把每个数放到对应的位置=>i=nums[i] class Solution { public: int duplicateInArray(vector<int>& nums) { int n = nums.size(); for (auto x : nums) if (x < 0 || x >= n) return -1; for (int i = 0; i < n; i ++ ) { while (nums[nums[i]] != nums[i]) swap(nums[i], nums[nums[i]]); if (nums[i] != i) return nums[i]; } return -1; } };
修改数组
1 1class Solution { 2 2 public: 3 3 int findRepeatNumber(vector<int>& nums) { 4 4 int n=nums.size(); 5 5 bool mark[n]; 6 6 memset (mark,0,sizeof mark);//* 7 7 for(auto x:nums) if(x<0||x>n-1) return -1; 8 8 for(int i=0;i<n;i++) 9 9 { 10 10 if(mark[nums[i]]) return nums[i]; 11 11 else mark[nums[i]]=1; 12 12 } 13 13 return -1; 14 14 } 15 15 } 16 16 };
hhの辣鸡代码
1 //计数时判定,若当前数字之前出现过则返回 2 class Solution { 3 public: 4 int findRepeatNumber(vector<int>& nums) { 5 int n=nums.size(); 6 vector<int>cnt (n,0); 7 for(auto x:nums) if(x<0||x>n-1) return -1; 8 for(int i=0;i<n;i++) 9 { 10 if(cnt[nums[i]]++) return nums[i]; 11 } 12 return -1; 13 } 14 };
hhの辣鸡代码
原文地址:https://www.cnblogs.com/Calculus9/p/12579582.html
时间: 2024-11-01 17:46:57