leetcode--Move Zeroes

来源:互联网 发布:软件打不开的原因 编辑:程序博客网 时间:2024/06/05 15:16

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].

Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.

解题思路:把非零元素向前移动,把零元素向后移动,最后把移动后的元素置零。

package leedcode;public class test {    public static void moveZeroes(int[] nums) {        int counter = 0;//非零元素的个数(初始化)        for (int i = 0; i < nums.length; i++) {            if (nums[i] == 0) {                counter++;//非零元素的个数加一                continue;            } else {                nums[i - counter] = nums[i];//把非零元素移位,关键的一步                continue;            }        }        //把最后几位置为0        for (int i = nums.length - counter; i < nums.length; i++) {            nums[i] = 0;        }    }    // 主方法    public static void main(String[] args) {        int[] s = { 1, 2, 0,3, 1, 2 };        moveZeroes(s);        for(int i=0;i<s.length;i++){            System.out.println(s[i]);        }    }}

java版本二

package arrayTest;/** * 将0元素移到最后,非零元素的相对位置不变。使用的是双指针,一个读取非零元素,另一个负责存储非零元素,最后将后面的元素置零 * @author duola * */public class moveZerosToLAst {    public static void moveZeroes(int[] nums) {        int i=0,j=0;        for(;i<nums.length;i++){            if(nums[i]!=0){                nums[j]=nums[i];                j++;            }        }        for(;j<nums.length;j++){            nums[j]=0;        }    }    public static void main(String[] args) {        int[] a = { 0, 1, 3, 4, 0, 3, 0, 2 };        moveZeroes(a);        for (int i = 0; i < a.length; i++) {            System.out.print(a[i]);        }    }}
1 0
原创粉丝点击