七、查找
-
剑指03,数组中重复的数字
//时间O(n),空间O(1) //不能使用哈希表,因为其空间复杂度为O(n) //此题妙就妙在可以把对应的值放在对应索引的位置 //第一次查找到表示这个值存在,第二次查找到表示重复 //有几点需要注意 //1.把对应的值放在对应索引的位置 //2.查两次,第一次查找到表示这个值存在,第二次查找到表示重复 //3.交换后不能直接++,需要再查一次 class Solution { public: int findRepeatNumber(vector<int>& nums) { int len = nums.size(); for(int i=0;i<len;++i) { //第一次查找到表示这个值存在 if(nums[i] == i) continue; //第二次查找到表示重复 if(nums[i] == nums[nums[i]]) return nums[i]; else { //交换后的元素不能直接++,因为可能把交换后的元素直接略过 swap(nums[i],nums[nums[i]]);