Leetcode 283. Move Zeroes

来源:互联网 发布:金海岸大酒店网络地图 编辑:程序博客网 时间:2024/05/01 14:36

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

我的代码:

思路:指针now,如果不为0,now向后移一位,如果为0,则后面的数字依次向前移。记录有几个0,再把数组最后几位置0

public class Solution {    public void moveZeroes(int[] nums) {        int znum=0;   //number of zeros        int now=0;  //pointer                for(int i = 0; i < nums.length; i++){            if(nums[now] != 0){                now++;            }            else{                znum++;                for(int j = now; j < nums.length - znum; j++){                    nums[j] = nums[j+1];                }            }        }                for(int k = nums.length-znum; k < nums.length; k++){            nums[k] = 0;        }    }}

看懂的比较简单的方法:

public void moveZeroes(int[] nums) {    int j = 0;    for(int i = 0; i < nums.length; i++) {        if(nums[i] != 0) {            int temp = nums[j];            nums[j] = nums[i];            nums[i] = temp;            j++;        }    }}

思路:i 和 j为两个指针,i 负责将整个数组过一遍,j 除了第一次,都指向0,其实找个例子跑一遍啥都明白了。

0 0
原创粉丝点击