diff --git a/Week_01/zby/LeetCode_11.java b/Week_01/zby/LeetCode_11.java new file mode 100644 index 0000000000000000000000000000000000000000..296f378cb91f53561eaaf66bc8fd993fb84c8ff1 --- /dev/null +++ b/Week_01/zby/LeetCode_11.java @@ -0,0 +1,70 @@ +package zby; + +/** + * + */ +public class LeetCode_11 { + /** + * 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。 + * 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。 + * 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 + *

+ * 说明:你不能倾斜容器。 + *

+ * + * @param args + */ + public static void main(String[] args) { + LeetCode_11 code = new LeetCode_11(); + int[] height = {1, 8, 6, 2, 5, 4, 8, 3, 7}; + int maxArea = code.maxArea1(height); + System.out.println(maxArea); + } + + /** + * 2 ms 40.2 MB + * + * @param height + * @return + */ + private int maxArea1(int[] height) { + int result = 0; + int left = 0; + int right = height.length - 1; + while (left < right) { + int x = right - left; + int y; + if (height[left] < height[right]) { + y = height[left++]; + } else { + y = height[right--]; + } + int area = x * y; + if (area > result) { + result = area; + } + } + return result; + } + + /** + * 824 ms 40.1 MB + * + * @param height + * @return + */ + public int maxArea(int[] height) { + int result = 0; + for (int i = 0; i < height.length; i++) { + for (int j = i + 1; j < height.length; j++) { + int x = j - i; + int y = Math.min(height[i], height[j]); + int area = x * y; + if (area > result) { + result = area; + } + } + } + return result; + } +} diff --git a/Week_01/zby/LeetCode_283.java b/Week_01/zby/LeetCode_283.java new file mode 100644 index 0000000000000000000000000000000000000000..a72ecc3b7e2e932d31b494e3cc68bbca02a66115 --- /dev/null +++ b/Week_01/zby/LeetCode_283.java @@ -0,0 +1,65 @@ +package zby; + +import java.util.Arrays; + +/** + * + */ +public class LeetCode_283 { + /** + * 283. 移动零 + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + * + * @param args + */ + public static void main(String[] args) { + LeetCode_283 code = new LeetCode_283(); + + int[] nums = {0, 1, 0, 3, 12}; + code.moveZeroes1(nums); + + System.out.println(Arrays.toString(nums)); + } + + /** + * 0 ms 38.4 MB + * + * @param nums + */ + private void moveZeroes1(int[] nums) { + if (nums == null || nums.length < 2) { + return; + } + int idx = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[idx] = nums[i]; + if (i != idx++) { + nums[i] = 0; + } + } + } + } + + /** + * 0 ms 38.7 MB + * + * @param nums + */ + public void moveZeroes(int[] nums) { + if (nums == null || nums.length < 2) { + return; + } + int idx = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + if (i != idx) { + nums[idx] ^= nums[i]; + nums[i] ^= nums[idx]; + nums[idx] ^= nums[i]; + } + idx++; + } + } + } +}