week01

it2026-10-01  10

AC13:找出数组中重复的数字

第一层for循环就是根据下标找到应该在这个位置上的数,因为一共n个数,而数字从0<数字<n-1,有点像快速排序的定位置。 内层循坏就是来找这个位置本来应该的值,而在这个过程中 顺便把当前在 这个下标中的值排好序, 比如nums[0] == 4 ,我们的目标是 通过 不断的swap来把0 交换到nums[0], 所以 把swap(nums[i],nums[nums[i]]) 也就是 swap(nums[0],nums[4]),

class Solution { public: int duplicateInArray(vector<int>& nums) { int n= nums.size(); for(int i=0 ;i<n;i++) { if(nums[i]<0 || nums[i]>n-1) { return -1; } } for(int i=0;i<n;i++) { while( i!=nums[i] && nums[i]!=nums[nums[i]] ){ swap(nums[i],nums[nums[i]]); } if(i!=nums[i] && nums[i]==nums[nums[i]] ){ return nums[i]; } } return -1; } };
最新回复(0)