第一种是我自己的解法,感觉自己做的题还是少,把简单的问题给复杂化了。唉!
使用快慢指针法:
初始条件让慢指针从0开始,快指针从1开始。以后移动每次使得慢指针都指向0这个数字的位置,快指针对应的数字则不为0,满足这样的条件就进行交换。
class Solution {
public void moveZeroes(int[] nums) {
/*
if(nums==null||nums.length==1){
return;
}*/
int fast=1;
int slow=0;
int temp=0;
while(fast<nums.length&&slow<nums.length){//循环结束条件
if(nums[slow]==0){//当慢指针为0时,让慢指针不动,找寻下一个不为零的值
if(nums[fast]!=0&&slow<fast){//始终保持慢指针在前,快指针在后
temp=nums[fast];
nums[fast]=nums[slow];
nums[slow]=temp;
slow++;
fast++;
}else{
fast++;
}
}else{
slow++;
}
}
System.out.println(Arrays.toString(nums));
}
}
第二种:
public static void moveZeroes(int[] nums) {
ArrayList<Integer> list=new ArrayList<>();
for (int num : nums) {
list.add(num);
}
int start=0,end=nums.length-1;
for(int i=0;i<nums.length;i++){
int n=list.get(i);
if (n!=0){
nums[start++]=n;
}else {
nums[end--]=n;
}
}
System.out.println(Arrays.toString(nums));
}
第三种:
private static void moveZeroes(int[] nums) {
// TODO Auto-generated method stub
int start=0;
for(int i=0;i<nums.length;i++) {
if(nums[i]!=0) {
nums[start++]=nums[i];
}
}
for(int i=start;i<nums.length;i++) {
nums[i]=0;
}
System.out.println(Arrays.toString(nums));
}