首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 移動零:原地雙指針保持非零順序

     編輯:關於C++

題目描述

給定數組 nums,將所有 0 移動到末尾,同時保持非零元素相對順序。要求原地操作,最小化操作次數。

雙指針單次遍歷

使用 idx 記錄下一個非零元素應放置的位置。遍歷數組,遇到非零元素交換到 idx 並遞增 idx。遍歷結束後,idx 之後自動為 0(因為原數組中非零元素已前移,剩餘位置可直接置 0 或本身已為 0)。

代碼實現 (C++)

class Solution {
public:
    void moveZeroes(vector& nums) {
        int idx = 0;
        for (int i = 0; i < nums.size(); ++i) {
            if (nums[i] != 0) {
                swap(nums[idx++], nums[i]);
            }
        }
    }
};

複雜度

  • 時間:O(n)
  • 空間:O(1)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved