給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。
示例:輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:必須在原陣列上操作,不能拷貝額外的陣列。
儘量減少操作次數。
我們建立兩個指標i和j,第一次遍歷的時候指標i用來記錄當前有多少非0元素。即遍歷的時候每遇到乙個非0元素就將其往陣列左邊挪,第一次遍歷完後,i
指標的下標就指向了第乙個為
0元素。
第二次遍歷的時候,只要i小於陣列長度,對應位置設為0。
時間複雜度:o(n)
空間複雜度:o(1)
在1)的基礎上,在第一層迴圈裡面加乙個判斷,i!==j,為true,j對應的位置需要賦值為0
/**
* @param arr
* @return
* 功能:陣列中移動零到最後
* 方法:雙指標,兩次迴圈(不是巢狀),一次將非0移到前面,一次將後面設定為0
*/var movezeroes = function(arr)
"11");
let len = arr.length;
let i = 0;//i也是陣列遍歷指標,為新陣列遍歷指標,前期指向非0項,後期才指向0項??
for(let j = 0; j < len; j++)
}while(i < len)
"11");
return arr;
};/**
* @param arr
* @return
* 功能:陣列中移動零到最後
* 方法:雙指標,一次迴圈,時間優化,只要i!== j,arr[j]賦值為0
*/var movezeroes_2 = function(arr)
"11");
let len = arr.length;
let i = 0;//i也是陣列遍歷指標,為新陣列遍歷指標,前期指向非0項,後期才指向0項??
for(let j = 0; j < len; j++)
i++;}}
"11");
return arr;
};console.log(movezeroes([0,1,0,3,12]));
console.log(movezeroes_2([0,1,0,3,12]));
參考:力扣
百里於2023年5月23日
力扣移動零
給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。下面展示一些內聯 片。a code block var foo bar clas...
力扣日記 移動零
給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 題解 1.雙指標方法 分別定義兩個索引從0開始,i指向當前已經處理好的序列的尾部,j指向待處理序列的頭部。j不斷向右移動,每次j指向非零數,則將...
力扣日記 283 移動零
給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。方法一 class solution def movezeroes self,n...