題目:移動零
給定一個陣列 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
複製程式碼
思考:
這道題一般的思路就是迴圈判斷元素是否為0,如果是就移動到陣列末尾。
但是這裡可以換一種思路,將非零元素前移,剩下的陣列位置就是0的位置,全賦值0即可。
複製程式碼
實現:
class Solution {
public void moveZeroes(int[] nums) {
if(nums == null || nums.length == 0){
return;
}
//nonzero記錄非0元素長度
int nonzero = 0;
for(int i=0;i<nums.length;i++){
if(nums[i] != 0) {
nums[nonzero++] = nums[i];
}
}
//將之後的元素賦0
while(nonzero < nums.length) {
nums[nonzero] = 0;
nonzero++;
}
}
}
複製程式碼