这里有一个移动0元素到末尾的问题。其实这个问题是非常简单的,思路也很清楚。不过说实话,调代码还是用了一些时间的,主要问题在于,自己被 trapped into the prob 了,没有及时的跳出来看一下。以后一定要注意这一个点。
问题要求:
问题要求分析
其实也没啥分析的,按照自己的思路来看,就是直接在内部移动0元素即可,做交换。
思路
写代码的过程中,遇到了一个问题,就是对于连续 的0元素怎么处理,这里用 while 语句,并且利用一个marker来记录连续0开始的地方,将其与后面的非0元素进行交换。
代码
package day_43;
// 这里主要注意连续0的处理。
// 用while循环和一个 marker 来记录并交换。
// 并且需要注意没有
import java.util.Arrays;
public class MoveZeros {
public void moveZeros(int[] nums){
int marker = 0;
for(int i=0;i<nums.length-1;i=marker+1){
if(nums[i]==0){
marker = i;
while (nums[i+1]==0 && i+1<nums.length-1){
i++;
}
int temp = nums[marker];
nums[marker] = nums[i+1];
nums[i+1] = temp;
}
else marker=i;
}
}
public static void main(String args[]){
MoveZeros m = new MoveZeros();
int a[] = {1,1,1};
m.moveZeros(a);
System.out.println(Arrays.toString(a));
}
}
提交之后发现运行时间上面,不是很快
别人的思路
双指针法。
其实这种 in-place 交换问题,都可以用双指针法来做。简单,好写。
网友评论