https://leetcode-cn.com/problems/move-zeroes/
1.雪球算法:
主要想法就是把0從一個小雪球滾成一個大雪球
就是遇到0 就把0滾入雪球中 然后和非0元素交換位置
class? solution {
? ? ? ? ? int Snowball = 0 ;
? ? ? ? ? for ( int i = 0 ; i < nums.length ;? ++I ) {
? ? ? ? ? ? ? if ( nums [ i ] == 0) {
? ? ? ? ? ? ? ? ? ? ? ? ? Snowball++;
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? else if {
? ? ? ? ? ? ? ? ? ? ? int t = nums [ i ] ;
? ? ? ? ? ? ? ? ? ? ? nums [ i ] =0;
? ? ? ? ? ? ? ? ? ? ? nums [ nums.length - i ] = t;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
}?
2.雙指針?biāo)惴ǎ?br>
計算非0個數(shù)
將非0按照順序依次排到最靠前位置
最后將之后的所有位置都置0
class solution {
? ? ? ? int index = 0 ;
? ? ? ? for ( int num : nums ) {
? ? ? ? ? ? ? if ( num != 0 ) {
? ? ? ? ? ? ? ? ? nums [ index++ ] = num;
? ? ? ? ? ? ? }
? ? ? ? }
? ? ? ? while ( index < nums.length ) {
? ? ? ? ? ? ? ? ? nums [ index++ ] = 0;
? ? ? ? }
}
3.
遍歷整個數(shù)組 把非0的數(shù)往前放到最靠前位置
然后將原來的位置賦0
但這樣會出現(xiàn)一種意料外的情況 例如[1,2]全非0
這樣會讓本應(yīng)該為0的位置變成了0
所以要判定 遍歷到的位置和要賦值的位置是不是同一個 只有不同才能使這個算法成立
class solution {
? ? ? ? ? int index = 0 ;
? ? ? ? ? for ( int I = 0 ; I < nums.length ; ++I ) {
? ? ? ? ? ? ? ? if ( nums != 0 ) {
? ? ? ? ? ? nums[ index ] = nums[ I ];
? ? ? ? ? ? ? ? if ( I != index ) {
? ? ? ? ? ? ? ? ? ? ? nums [ I ] = 0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? index ++ ;
? ? ? ? }
}