題目:
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0]
說明:
- 必須在原數組上操作,不能拷貝額外的數組。
- 儘量減少操作次數。
解題思路:雙重for循環,類似冒泡排序:找到零,和後面的數字依次交換。
func moveZeroes(nums []int) {
count:=0
for i:=0;i
if nums[i]==0{
for j:=i+1;j
nums[j-1],nums[j]=nums[j],nums[j-1]
}
count++
}else{
i++
}
}
}
運行時間132ms
代碼優化:
func moveZeroes(nums []int) {
length:=len(nums)
if length<2{
return
}
for i:=0;i
if nums[i]==0{
for j:=i+1;j
nums[j-1]=nums[j]
}
nums[length-1]=0
length--
}else{
i++
}
}
}
運行時間100ms
再優化:反向思維,考慮將非零數據依次放到數組中,後面則全為0
func moveZeroes(nums []int) {
k:=0
for i:=0;i
if nums[i]!=0{
if k!=i{
nums[k]=nums[i]
}
k++
}
}
for k
nums[k]=0
k++
}
}
運行時間88ms