LeetCode #283 移动零(双指针版本,效率高)

基本思路

  思路————双指针
  初始状态左右指针都指向数组首位元素,然后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)

posted @ 2023-04-12 15:12  -Miracle-  阅读(12)  评论(0编辑  收藏  举报