双指针详解
原地:
class Solution {
public:void moveZeroes(vector<int>& nums) {int left = -1; // 用于维护不为0的数,及指向最后一个不为0的数,// 一开始不存在所以指向-1int right = 0; //用来遍历数组while(right < nums.size()){if(nums[right]==0) //如果相等0直接下一个{right++;}else{left++; //如果不为0,因为不为0个数+1,所以left++swap(nums[left],nums[right]); // 并交互left和right指向的数,// 及让left指向非0数}}}
};
解题思路:
思路一:如果可以不在原地数组进行操作的话,可建一个新数组,用一个指针指向原数组进行遍历,另一个指向新数组进行用于维护不为0的数 ,这是一个挺好想的思路。
思路二:但如果在原地进行操作呢,其实思路是一样的,一个指针进行遍历,另一个指针对不为0的数进行维护。
---------------------------------------------------------------------------------------------------------------------------------