1. 程式人生 > 資訊 >一箭 11 飛,SpaceX 第 33 批星鏈衛星上天:累計發射 1942 顆

一箭 11 飛,SpaceX 第 33 批星鏈衛星上天:累計發射 1942 顆

283. 移動零

檢視原題

解題思路

  1. 將right賦值為nums.length-1,代表當前連續0開始的位置
  2. lef賦值為 0 表示當前陣列掃描的位置
  3. 從左到右掃描陣列,如果當前項是 0 則將從陣列當前項到連續0開始位置之間的陣列項都向前移動一位,然後在後面補0,同時更新 right-- ,不在更新left,防止有連續的0,再次回到這個位置
  4. 如果當前項不是0 則更新left++

程式碼

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
    let left; //左指標,開始迴圈
    let length = nums.length;
    let right = length - 1; //右指標的最開始位置
    for (left = 0; left <= right;) {
        // 如果當前項是0則將當前項之後的數值向前移一位
        if (nums[left] === 0) {
            for (let j = left + 1; j <= right; j++) {
                nums[j - 1] = nums[j]
            }
            nums[right] = 0;
            right--;
        } else {
            left++;
        }
    }
};