天天看點

leetcode 283. 移動零問題描述解決思路

leetcode 283. 移動零

  • 問題描述
  • 解決思路

問題描述

給定一個數組 nums,編寫一個函數将所有 0 移動到數組的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12]

輸出: [1,3,12,0,0]

說明:

必須在原數組上操作,不能拷貝額外的數組。

盡量減少操作次數。

解決思路

定義一個p指針,初始指向數組的首元素,同時對數組進行周遊,當數組目前元素為0時,i++;當目前的數組元素不為0時,将此時的元素與p指針所指向的元素進行交換。周遊完數組即可。

var moveZeroes = function(nums) {
    let p = 0;
    for (let i=0 ; i < nums.length ; i++ ) {
        if ( nums[i] ) {
            if ( i!=p ) {//如果目前元素不為0則不進行交換
                [nums[p], nums[i]] = [nums[i], nums[p]];
                p++;
            } else {
                p++;
            }
        }
    }
};