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.双指针算法:
计算非0个数
将非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.
遍历整个数组 把非0的数往前放到最靠前位置
然后将原来的位置赋0
但这样会出现一种意料外的情况 例如[1,2]全非0
这样会让本应该为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 ++ ;
}
}