目录
1. 三角形最小路径和 ★★
2. 多线程问题 ★★
3. 矩形区域不超过 K 的最大数值和 ★★★
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
给定一个三角形 triangle
,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i
,那么下一步可以移动到下一行的下标 i
或 i + 1
。
示例 1:
输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]] 输出:11 解释:如下面简图所示: 2 3 4 6 5 7 4 1 8 3 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
示例 2:
输入:triangle = [[-10]] 输出:-10
提示:
1 <= triangle.length <= 200
triangle[0].length == 1
triangle[i].length == triangle[i - 1].length + 1
-10^4 <= triangle[i][j] <= 10^4
进阶:
O(n)
的额外空间(n
为三角形的总行数)来解决这个问题吗?代码:
class Solution {public int minimumTotal(List> triangle) {int[] dp = new int[triangle.size()];int ans = 0;dp[0] = triangle.get(0).get(0);int temp, prev = 0, cur;for (int i = 1; i < triangle.size(); i++) {for (int j = 0; j < triangle.get(i).size(); j++) {temp = triangle.get(i).get(j);cur = dp[j];if (j == 0)dp[j] = cur + temp;else if (j == triangle.get(i).size() - 1)dp[j] = prev + temp;elsedp[j] = Math.min(prev, cur) + temp;prev = cur;}}for (int i = 1; i < dp.length; i++) {if (dp[ans] > dp[i])ans = i;}return dp[ans];}
}
1.程序中需要开启两个线程(线程1和线程2)
2.线程1固定5秒钟执行一次
3.线程2固定10秒钟执行一次
4.开启程序如何做到线程1执行完成后再执行线程2,并且在之后无论谁先执行都需等待对方执行完成后才可以开始执行
代码:
public class TestThreadJoin {public static void main(String[] args) {final Object lock = new Object();Runnable r1 = () -> {while (true) {synchronized (lock) {System.out.println("线程1执行。");}try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}}};Runnable r2 = () -> {while (true) {synchronized (lock) {System.out.println("线程2执行。");}try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}}};new Thread(r1).start();new Thread(r2).start();}
}
给你一个 m x n
的矩阵 matrix
和一个整数 k
,找出并返回矩阵内部矩形区域的不超过 k
的最大数值和。
题目数据保证总会存在一个数值和不超过 k
的矩形区域。
示例 1:
输入:matrix = [[1,0,1],[0,-2,3]], k = 2 输出:2 解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。
示例 2:
输入:matrix = [[2,2,-1]], k = 3 输出:3
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-100 <= matrix[i][j] <= 100
-10^5 <= k <= 10^5
进阶:如果行数远大于列数,该如何设计解决方案?
代码:
class Solution {public int maxSumSubmatrix(int[][] matrix, int k) {int row = matrix.length;if (row <= 0)return 0;int line = matrix[0].length;int max = Integer.MIN_VALUE;for (int left = 0; left < line; left++) {int[] rowSum = new int[row];for (int right = left; right < line; right++) {for (int i = 0; i < row; i++) {rowSum[i] += matrix[i][right];}max = Math.max(max, dpmax(rowSum, k));}}return max;}private int dpmax(int[] arr, int k) {int max = Integer.MIN_VALUE;int n = arr.length;for (int top = 0; top < n; top++) {int sum = 0;for (int bottom = top; bottom < n; bottom++) {sum += arr[bottom];if (sum > max && sum <= k)max = sum;}}return max;}
}
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
![]() | Golang每日一练 专栏 |
![]() | Python每日一练 专栏 |
![]() | C/C++每日一练 专栏 |
![]() | Java每日一练 专栏 |