链接
代码:
class Solution {
public:void moveZeroes(vector<int>& nums) {int k = 0;for(auto&e:nums){if(e!=0)nums[k++] = e;}while(k<nums.size()){nums[k++] =0;}}
};
思路比较简单:k就相当于一个指针,用范围for在前面遍历元素,如果不是0,那说明要往k这里移动,当范围for跳出,k之后(包括k) 位置的元素都应该写0。
链接
代码:
class Solution {
public:int findDuplicate(vector<int>& nums) {int a = 0, b = 0;while (true) {a = nums[a];b = nums[nums[b]];if (a == b) {a = 0;while (a != b) {a = nums[a];b = nums[b];}return a;}}return -1;}
};
图解:
注意:我们不是要去建立这样一个有向图,而是根据数组的下标和存储的元素建立起的一种虚拟的关系。