From 380794a56360f5613c1c56bdd8f4f760155c23ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=92=E9=B8=9F?= Date: Wed, 23 Dec 2020 17:19:50 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=20leetcode-11=EF=BC=8C?= =?UTF-8?q?=E7=9B=9B=E6=B0=B4=E6=9C=80=E5=A4=9A=E7=9A=84=E5=AE=B9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/jqb/P11ContainerWithMostWater.java | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Week_01/jqb/P11ContainerWithMostWater.java diff --git a/Week_01/jqb/P11ContainerWithMostWater.java b/Week_01/jqb/P11ContainerWithMostWater.java new file mode 100644 index 0000000..ee16648 --- /dev/null +++ b/Week_01/jqb/P11ContainerWithMostWater.java @@ -0,0 +1,92 @@ +//给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, +//ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 +// +// 说明:你不能倾斜容器。 +// +// +// +// 示例 1: +// +// +// +// +//输入:[1,8,6,2,5,4,8,3,7] +//输出:49 +//解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 +// +// 示例 2: +// +// +//输入:height = [1,1] +//输出:1 +// +// +// 示例 3: +// +// +//输入:height = [4,3,2,1,4] +//输出:16 +// +// +// 示例 4: +// +// +//输入:height = [1,2,1] +//输出:2 +// +// +// +// +// 提示: +// +// +// n = height.length +// 2 <= n <= 3 * 104 +// 0 <= height[i] <= 3 * 104 +// +// Related Topics 数组 双指针 +// 👍 2061 👎 0 + +package homework.algorithm.Week_01.jqb; + +//Java:盛最多水的容器 +public class P11ContainerWithMostWater { + public static void main(String[] args) { + Solution solution = new P11ContainerWithMostWater().new Solution(); + // TO TEST + int[] a = new int[]{1, 8, 6, 2, 5, 4, 8, 3, 7}; + int area = solution.maxArea2(a); + System.out.println(area); + } + + //leetcode submit region begin(Prohibit modification and deletion) + + class Solution { + //方法1;暴力循环,嵌套循环然后比较面积大小 + public int maxArea1(int[] height) { + int max = 0; + + for (int i = 0; i < height.length - 1; i++) { + for (int j = i + 1; j < height.length; j++) { + int area = (j - i) * Math.min(height[i], height[j]); + max = Math.max(area, max); + } + + } + return max; + } + //方法2:双指针法 + public int maxArea2(int[] height) { + int max = 0; + for (int i = 0, j = height.length - 1; i < j;) { + int minHeight = height[i] < height[j] ? height[i++] : height[j--]; + int area = (j-i+1) * minHeight; + max = Math.max(area,max); + } + return max; + } + } +//leetcode submit region end(Prohibit modification and deletion) + + +} -- Gitee From f54d32a6ef7f97bc1483fe16f690be035b8cb8f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=92=E9=B8=9F?= Date: Thu, 24 Dec 2020 11:36:52 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/jqb/P11ContainerWithMostWater.java | 11 ++-- Week_01/jqb/P70ClimbingStairs.java | 69 ++++++++++++++++++++++ 2 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 Week_01/jqb/P70ClimbingStairs.java diff --git a/Week_01/jqb/P11ContainerWithMostWater.java b/Week_01/jqb/P11ContainerWithMostWater.java index ee16648..036114c 100644 --- a/Week_01/jqb/P11ContainerWithMostWater.java +++ b/Week_01/jqb/P11ContainerWithMostWater.java @@ -75,15 +75,16 @@ public class P11ContainerWithMostWater { } return max; } - //方法2:双指针法 + + //方法2:双指针法,左右边界i,j,同时向中间收敛,左右夹逼 public int maxArea2(int[] height) { int max = 0; - for (int i = 0, j = height.length - 1; i < j;) { + for (int i = 0, j = height.length - 1; i < j; ) { int minHeight = height[i] < height[j] ? height[i++] : height[j--]; - int area = (j-i+1) * minHeight; - max = Math.max(area,max); + int area = (j - i + 1) * minHeight; + max = Math.max(area, max); } - return max; + return max; } } //leetcode submit region end(Prohibit modification and deletion) diff --git a/Week_01/jqb/P70ClimbingStairs.java b/Week_01/jqb/P70ClimbingStairs.java new file mode 100644 index 0000000..b30272d --- /dev/null +++ b/Week_01/jqb/P70ClimbingStairs.java @@ -0,0 +1,69 @@ +//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 +// +// 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? +// +// 注意:给定 n 是一个正整数。 +// +// 示例 1: +// +// 输入: 2 +//输出: 2 +//解释: 有两种方法可以爬到楼顶。 +//1. 1 阶 + 1 阶 +//2. 2 阶 +// +// 示例 2: +// +// 输入: 3 +//输出: 3 +//解释: 有三种方法可以爬到楼顶。 +//1. 1 阶 + 1 阶 + 1 阶 +//2. 1 阶 + 2 阶 +//3. 2 阶 + 1 阶 +// +// Related Topics 动态规划 +// 👍 1391 👎 0 + +package homework.algorithm.Week_01.jqb; + +//Java:爬楼梯 +public class P70ClimbingStairs { + public static void main(String[] args) { + Solution solution = new P70ClimbingStairs().new Solution(); + // TO TEST + int n = 4; + System.out.println(solution.climbStairs(n)); + } + + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + //解决算法问题思路: 找 最近重复子问题,然后通过if else ,for while 这类loop 或者 递归(recursion)来解决 + //本题分析: + //1、一级台阶,一步就可跨过,所以是1种方法 + //2、二级台阶,一步跨两级,或者 一步上一级, 所以是2种方法 + //3、三级台阶,一步上一级;先上一级,再上两级;或者先上两级,再上一级,所以是3种方法 + //4、四级台阶,共5中方法 + // 一步上一级; + // 先上一级,再上两级,再上一级; + // 先上一级,再上一级,再上两级; + // 先上两级,再上一级,再上一级; + // 先上两级,再上两级; + //结论: 以此类推,上到第n级台阶,相当于将上到第(n-1)级台阶的方法 加上 第(n-2)级台阶的方法相加即可,公式为:f(n) = f(n-1) + f(n-2). 斐波那契数列 fibonacci + + public int climbStairs(int n) { + if (n <= 2) { + return n; + } + + int f1 = 1, f2 = 2, f3 = 3; + for (int i = 3; i < n; i++) { + f1 = f2; + f2 = f3; + f3 = f1 + f2; + } + return f3; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} -- Gitee From 70ef63eb2775982166f60b23cf593613861853aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=92=E9=B8=9F?= Date: Fri, 25 Dec 2020 14:50:20 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/jqb/P70ClimbingStairs.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Week_01/jqb/P70ClimbingStairs.java b/Week_01/jqb/P70ClimbingStairs.java index b30272d..4a1fea5 100644 --- a/Week_01/jqb/P70ClimbingStairs.java +++ b/Week_01/jqb/P70ClimbingStairs.java @@ -54,7 +54,6 @@ public class P70ClimbingStairs { if (n <= 2) { return n; } - int f1 = 1, f2 = 2, f3 = 3; for (int i = 3; i < n; i++) { f1 = f2; -- Gitee