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

LeetCode 283:Move Zeroes(移動零)

     編輯:關於C++

一、題目描述

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

範例: [0,1,0,3,12] → [1,3,12,0,0]

二、解題思路:雙指針(快慢指針)

維護 index 指向第一個 0 的位置(或下一個待放置非零元素的位置),current 遍歷數組:

  • 若 nums[current] != 0,交換 nums[index] 和 nums[current],index++。
  • 若為 0,current++ 繼續。

這樣非零元素依次被移到前面,0 自然被推到後面。即使前面無 0,交換也是自己與自己,無副作用。

三、代碼實現(C++)

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

四、複雜度分析

  • 時間複雜度:O(N),單次遍歷
  • 空間複雜度:O(1),原地交換

本題為雙指針經典應用,代碼極其簡潔高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved