基本思路
思路————双指针
初始状态左右指针都指向数组首位元素,然后right指针开始迭代数组,当碰到非0元素则与左指针left所在位置的元素交换。
交换完毕后,左指针left则向前移动到下一位置,做好准备迎接下一个非0元素的交换。
这种算法效率比之前撰写的“伪双指针”效率更高,更能应对特殊情况。
标程
1 class Solution { 2 public: 3 void moveZeroes(vector<int>& nums) { 4 int n = nums.size(); 5 int left = 0, right = 0; 6 while(right < n){ 7 if(nums[right]){ 8 swap(nums[left++],nums[right]); 9 } 10 right++; 11 } 12 } 13 };
时间复杂度
O(N)
标签:right,效率高,nums,int,元素,283,left,LeetCode,指针 From: https://www.cnblogs.com/miracle-cst/p/17309904.html