diff --git a/Week_01/cp/LeetCode_283.java b/Week_01/cp/LeetCode_283.java index 45460b40bf84ac388861c62a13954914865a6d4a..40292beb1570577faec98e713fd9aeaec943034c 100644 --- a/Week_01/cp/LeetCode_283.java +++ b/Week_01/cp/LeetCode_283.java @@ -1,7 +1,61 @@ package cp; /** + * * Created by 程程有小棉被啊 on 2020年12月07日. */ public class LeetCode_283 { + + + /* + 移动零 + 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + 说明: + 1.必须在原数组上操作,不能拷贝额外的数组。 + 2.尽量减少操作次数。 + 示例: + 输入: [0,1,0,3,12] + 输出: [1,3,12,0,0] + */ + public static void main(String[] args) { + int[] num = {0,1,0,3,12}; +// moveZero(num); + moveZero2(num); + } + + static void moveZero(int[] num){ + //双指针 + int j = 0;//记录不为0的位置 + for (int i = 0; i < num.length; i++) { + if (num[i] != 0){ + num[j] = num[i];//交换位置 + if (j != i){ + num[i] = 0;//将该处置为零 + } + j++; + } + } + moveZeroPrintln(num); + } + + static void moveZero2(int[] num){ + //先将不是零的数字往前挪动,最后将最后的补零 + int j =0; + for (int i = 0; i < num.length; i++) { + if (num[i] != 0){ + num[j] = num[i]; + j++; + } + } + for (int i = j; i < num.length; i++) { + num[i] = 0; + } + moveZero(num); + } + + static void moveZeroPrintln(int[] num){ + for (int i = 0; i < num.length; i++) { + System.out.println(num[i]); + } + } }