程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> leetcode筆記:Move Zeroes

leetcode筆記:Move Zeroes

編輯:關於C++

一. 題目描述

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

Note:

You must do this in-place without making a copy of the array. Minimize the total number of operations.

二. 題目分析

題目的意思很明確,給定一個數組,將非零元素調整到前面,零元素放在數組後面,要求原位操作並使用盡量少的操作次數。

題目比較簡單,只需掃描一次數組,在此過程中使用一個整形變量Index用於記錄非零元素的個數,每遇到一個非零數,將其放在nums[Index]中,然後Index1

遍歷一遍後,nums的非零元素位置已經確定,只需將數組後半段全部置零即可,由於Index記錄了非零元素的個數,所以置零操作也很方便。

三. 示例代碼

class Solution {
public:
    void moveZeroes(vector& nums) {
        if (nums.size() < 1) return;  
        int Index = 0;
        for (int i = 0; i < nums.size(); ++i) 
            if (nums[i] != 0) 
                nums[Index++] = nums[i];

        for (;Index < nums.size(); ++Index) 
            nums[Index] = 0;
    }
};

四. 小結

對於這類問題,一般都要求原位操作及盡量少的操作次數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved