Java每日一练(20230316)
创始人
2025-05-28 22:22:13

目录

1. 三角形最小路径和  ★★

2. 多线程问题  ★★

3. 矩形区域不超过 K 的最大数值和  ★★★

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 三角形最小路径和

给定一个三角形 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];}
}

2. 多线程问题

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();}
}

3. 矩形区域不超过 K 的最大数值和

给你一个 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每日一练 专栏

相关内容

热门资讯

玛雅人的五大预言 玛雅人预言2... 曾经玛雅人预言2012年是世界末日,但当时好像没有发生什么。没想到10年后的2022年,疫情,战争,...
cad打印线条粗细设置 cad... 004-线型(下)打印样式设置和线型文件使用一、线宽设置方法制图规范里边的线宽要求,我们已经定义好,...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
荼蘼什么意思 岁月缱绻葳蕤生香... 感谢作者【辰夕】的原创独家授权分享编辑整理:【多肉植物百科】百科君坐标:云南 曲靖春而至,季节流转,...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...