From f69d545dada0c6b7cd8d472e2856e6fa04d360bb Mon Sep 17 00:00:00 2001 From: cp0511 Date: Tue, 8 Dec 2020 09:10:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=A8=8B=E6=B2=9B-238-=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E9=9B=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/cp/LeetCode_283.java | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/Week_01/cp/LeetCode_283.java b/Week_01/cp/LeetCode_283.java index 45460b4..40292be 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]); + } + } } -- Gitee From 703639216e0b6383b314fd1cbeebc4c38c342e54 Mon Sep 17 00:00:00 2001 From: cp0511 Date: Wed, 9 Dec 2020 17:10:09 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=A8=8B=E6=B2=9B-238-=E7=9B=9B=E6=B0=B4?= =?UTF-8?q?=E6=9C=80=E5=A4=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/cp/LeetCode_11.java | 45 +++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Week_01/cp/LeetCode_11.java diff --git a/Week_01/cp/LeetCode_11.java b/Week_01/cp/LeetCode_11.java new file mode 100644 index 0000000..eba4832 --- /dev/null +++ b/Week_01/cp/LeetCode_11.java @@ -0,0 +1,45 @@ +package cp; + +/** + * Created by 程程有小棉被啊 on 2020年12月09日. + */ +public class LeetCode_11 { + + /* + 盛水最多的 + 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。 + 在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。 + 找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。 + 示例: + 输入:[1,8,6,2,5,4,8,3,7] + 输出:49 + */ + + + public static void main(String[] args) { + int[] num = {1, 8, 6, 2, 5, 4, 8, 3, 7}; + System.out.println(mostWater(num)); + } + + //由两边向中间收拢(夹逼准则) + static int mostWater(int[] num) { + int mostWater = 0; + for (int i = 0, j = num.length - 1; i < j; ) { + //计算当前最大的面积 + int mostNow = (j-i) * Math.min(num[i],num[j]);//长度取最小的进行计算 + if (num[i] < num[j]){ + i++; + }else{ + j--; + } + //判断首尾的元素,每次移动最小的元素 + mostWater = Math.max(mostWater,mostNow); + } + return mostWater; + } + + + + + +} -- Gitee