题目:
解答:
方法一:哈希
使用哈希来进行处理,当发现哈希中包含相应的元素时,则表示出现了重复的元素,则返回即可。
1 class Solution { 2 public: 3 int findRepeatNumber(vector<int>& nums) 4 { 5 std::set<int> res; 6 7 for (int i = 0; i < nums.size(); i++) 8 { 9 // 若包含元素, 则返回 10 if (res.count(nums[i])) 11 { 12 return nums[i]; 13 } 14 else 15 { 16 // 若不包含元素, 则插入 17 res.insert(nums[i]); 18 } 19 } 20 21 return -1; 22 } 23 };
方法二:仍然为哈希
1 class Solution { 2 public: 3 int findRepeatNumber(vector<int>& nums) 4 { 5 //算法思路见剑指offer,P39-40 6 if(nums.empty()) 7 { 8 return -1; 9 } 10 11 for(int i = 0; i < nums.size(); ++i) 12 { 13 while(nums[i] != i) 14 { 15 if(nums[i] == nums[nums[i]]) 16 { 17 return nums[i]; 18 } 19 else 20 { 21 swap(nums[i], nums[nums[i]]); 22 } 23 } 24 } 25 26 return -1; 27 } 28 };
原文:https://www.cnblogs.com/ocpc/p/12856309.html