在Java编程中,有很多经典的题目可以帮助提高编程技能。以下是一些核心代码刷题的例子:
1.两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中出和为目标值的那两个整数,并返回他们的数组下标。
public class TwoSum { | |
public static void main(String[] args) { | |
int[] nums = {2, 7, 11, 15}; | |
int target = 9; | |
int[] result = twoSum(nums, target); | |
System.out.String(result)); // 输出 [0, 1] | |
} | |
public static int[] twoSum(int[] nums, int target) { | |
Map<Integer, Integer> map = new HashMap<>(); | |
for (int i = 0; i < nums.length; i++) { | |
int complement = target - nums[i]; | |
if (ainsKey(complement)) { | |
return new int[]{(complement), i}; | |
} | |
map.put(nums[i], i); | |
} | |
throw new IllegalArgumentException("No two sum solution"); | |
} | |
} | |
2.盛最多水的容器:给定 n 个非负整数 a1,a2,...,an,每个数代表一个坐标点 (i, ai)。在坐标内画 n 条垂直线,使得 i 垂直线的两个端点分别为 (i, ai) 和 (i, 0)。出其中的两条线,使得它们与 x 轴构成的容器可以容纳最多的水。
public class MaximalRectangle { | |
public static void main(String[] args) { | |
int[] heights = new int[]{2, 1, 5, 0, 6, 2}; | |
int maxArea = largestRectangleArea(heights); | |
System.out.println(maxArea); // 输出 16 | |
} | |
public static int largestRectangleArea(int[] heights) { | |
Stack<Integer> stack = new Stack<>(); | |
int maxArea = 0; | |
int area = 0; | |
for (int i = 0; i <= heights.length; i++) { // 后进先出原则计算每个位置的高度和左边界和右边界的面积 | |
while (!pty() && heights[stack.peek()] >= heights[i]) { // 当栈不为空且栈顶元素的高度大于等于当前元素时,弹出栈顶元素并计算面积。 | |
int top = stack.pop(); // 弹出栈顶元素,即左边界的右边界。 | |
area = Math.max(area, heights[top] * (i - stack.size() - 1)); // 计算以栈顶元素为左边界的右边界的面积。 | |
maxArea = Math.max(maxArea, area); // 更新最大面积。 | |
} | |
stack.push(i); // 将当前位置入栈,作为左边界的右边界。 | |
} | |
while (!pty()) { // 处理栈中剩余元素。 | |
int top = stack.pop(); // 弹出栈顶元素,即左边界的右边界。 | |
area = Math.max(area, heights[top] * (heights.length - stack.size())); // 计算以栈顶元素为左边界的右边界的面积。 | |
maxArea = Math.max(maxArea, area); // 更新最大面积。 | |
} | |
return maxArea; // 返回最大面积。 | |
} | |
} | |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论