生活随笔
收集整理的這篇文章主要介紹了
2019-03-14-算法-进化(移动零)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。
示例:
輸入
: [0,1,0,3,12]
輸出
: [1,3,12,0,0]
說明:
必須在原數組上操作,不能拷貝額外的數組盡量減少操作次數
public void moveZeroes1(int[] nums
) {int len
= nums
.length
;int count
=0;if(len
==0 || len
==1) {return ;}for(int i
=0;i
<len
-count
;i
++) {if(nums
[i
] == 0) {int j
=0;count
++;for(j
=i
;j
<len
-count
;j
++) {nums
[j
]=nums
[j
+1];}nums
[j
]=0;i
--;}}}public void moveZeroes2(int[] nums
) {int len
= nums
.length
;int count
=0;if(len
==0 || len
==1) {return ;}int lianXu
=0;for(int i
=0;i
<len
-count
+lianXu
;i
++) {if(nums
[i
] == 0) {lianXu
++;count
++;}else {if(lianXu
!=0) {int j
=0;for(j
=i
-lianXu
;j
<len
-count
;j
++) {nums
[j
]=nums
[j
+lianXu
];}for(int k
=0;k
<lianXu
;k
++) {nums
[j
+k
]=0;}i
-=lianXu
;lianXu
=0;}}}}
public int[] moveZeroes3(int[] digits
) {int count
=0,index
=0;for(int i
=0;i
<digits
.length
;i
++) {if(digits
[i
] == 0) {count
++;}}if(count
==0||count
==digits
.length
) {return digits
;}for(int i
=0;i
<digits
.length
;i
++) {while(i
<digits
.length
&& digits
[i
] ==0) {i
++;}if(index
<digits
.length
-count
) {digits
[index
++] =digits
[i
];}}for(int i
=digits
.length
-1;i
>digits
.length
-1-count
;i
--) {digits
[i
]=0;}return digits
;}
public int[] moveZeroes(int[] digits
) {int nonZeroIndex
=0, len
=digits
.length
;for(int i
=0;i
<len
&& nonZeroIndex
<len
;i
++) {if(digits
[i
]==0) {for(int j
=nonZeroIndex
;j
<len
;j
++) {if(digits
[j
] !=0) {digits
[i
]=digits
[j
];digits
[j
]=0;nonZeroIndex
++;break;}}}else {nonZeroIndex
++;}}return digits
;}
public int[] moveZeroes(int[] digits
) {int nonZeroIndex
=0;for(int i
=0;i
<digits
.length
;i
++) {if(digits
[i
]!=0) {digits
[nonZeroIndex
++]=digits
[i
];}}while(nonZeroIndex
<digits
.length
) {digits
[nonZeroIndex
++]=0;}return digits
;}
好的代碼總是優美的,加油!
總結
以上是生活随笔為你收集整理的2019-03-14-算法-进化(移动零)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。