Go實現算法:移動零(LeetCode)

題目:

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

示例:

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

說明:

  1. 必須在原數組上操作,不能拷貝額外的數組。
  2. 儘量減少操作次數。

解題思路:雙重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


Go實現算法:移動零(LeetCode)


分享到:


相關文章: