class Solution {
public void moveZeroes(int[] nums) {
// 1.将结果放入新数组res
int len=nums.length;
int[] res=new int[len];
int i=0;
int j=len-1;
int pos=0;
while(i<=j){
if(nums[pos]==0) res[j--]=0;
else res[i++]=nums[pos];
pos++;
}
System.arraycopy(res,0,nums,0,len);
// nums=Arrays.copyOf(res,len);//在编译器输出nums值以及改变,但在平台上nums没有被res赋值
}
}
方法2:这个方法有点傻,其实遇到0,其后的所有值不用全都挪动的
class Solution {
public void moveZeroes(int[] nums) {
// 2.遇到零则直接移动,最后结尾空位0值填充
int len=nums.length;
int count=0;
int i=0;
while(i
方法3:双指针(遍历两次)
两次遍历:遇到0,直接覆盖;然后在数组末尾补0
class Solution {
public void moveZeroes(int[] nums) {
// 3.双指针(两次遍历),遇到0,直接覆盖;然后在数组末尾补0
int len=nums.length;
int j=0;
for(int i=0;i
方法4:双指针(单次遍历)
0值和非0值作替换
class Solution {
public void moveZeroes(int[] nums) {
// 4.双指针(单次遍历),0值和非0值作替换
int len=nums.length;
int j=0;
int tmp;
for(int i=0;i



