三角形最小路径和

给定一个三角形 triangle ,找出自顶向下的最小路径和。

每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 ii + 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

进阶:

你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题吗?


import java.util.*;class Solution {public int minimumTotal(List<List<Integer>> 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];}public static void main(String[] args) {List<List<Integer>> triangle = new ArrayList<List<Integer>>();List<Integer> list1 = new ArrayList<Integer>();list1.add(2);List<Integer> list2 = new ArrayList<Integer>();list2.add(3);list2.add(4);List<Integer> list3 = new ArrayList<Integer>();list3.add(6);list3.add(5);list3.add(7);List<Integer> list4 = new ArrayList<Integer>();list4.add(4);list4.add(1);list4.add(8);list4.add(3);triangle.add(list1);triangle.add(list2);triangle.add(list3);triangle.add(list4);Solution solution = new Solution();int total_min = solution.minimumTotal(triangle);System.out.println(total_min);}
}

外出采摘的日本人

二战后的某一天,N个日本人来到了一个山洞休息,为了派出一个日本人去外面充满危险的丛林中采摘食物,他们设置如下游戏产生外出采摘的人:

  • 1、首先,所有参加游戏的日本人按顺序编号为1、2、3…N;
  • 2、接下来每个日本人心里产生一个数字,这个数字称为序号为 N的人的密码P;
  • 3、所有参加游戏的人按照编号站成一个圈,长老为游戏设置初始密码K,从编号为 1的人开始报数,报到 K的人退出队伍,然后将自己心中的密码P说出来,由下一个人继续从 1开始报数,报到P的人退出队伍,以此类推;
  • 4、当队伍中剩下一个人的时候,这个人就是今天要出去采摘的日本人,他可能回不来了! 请各位同学设计程序并使用Java语言实现改程序,在用户输入了人数N、每个人的密码P和初始密码K的情况下,自动完成上面的选择过程,输出先后离开队伍的人的序号序列,最后输出要去采摘的日本人,输出他的编号。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class JosephCircle {public int newJoseph(int n, int[] p, int k) {List<Integer> num = new ArrayList<Integer>();for (int i = 0; i < n; i++)num.add(i);int t = k, index = 0;for (int i = 0; i < n - 1; i++) {index = (index + t) % num.size();num.remove(index);t = p[index];if (index == num.size())index = 0;}return num.get(0) + 1;}public int oldJoseph(int n, int k) {int w = 0;for (int i = 2; i <= n; i++) {w = (w + k) % i;}return w;}public static void main(String[] args) {JosephCircle jc = new JosephCircle();Scanner scan = new Scanner(System.in);int n, k;int[] p = new int[100];System.out.print("Enter N = ");n = scan.nextInt();System.out.print("Enter P[] = ");for (int i = 0; i < n; i++) {p[i] = scan.nextInt();}System.out.print("Enter K = ");k = scan.nextInt();System.out.println();System.out.println("Survivor is No." + jc.newJoseph(n, p, k));}
}

最大矩形

给定一个仅包含 01 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例 1:

输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
输出:6
解释:最大矩形如上图所示。

示例 2:
输入:matrix = []
输出:0

示例 3:
输入:matrix = [[“0”]]
输出:0

示例 4:
输入:matrix = [[“1”]]
输出:1

示例 5:
输入:matrix = [[“0”,“0”]]
输出:0

提示:

rows == matrix.length
cols == matrix[0].length
0 <= row, cols <= 200
matrix[i][j] 为 '0' 或 '1'

以下程序实现了这一功能:

import java.util.Arrays;class Solution {public int maximalRectangle(char[][] matrix) {if (matrix == null || matrix.length == 0)return 0;int m = matrix.length;int n = matrix[0].length;int[] left = new int[n];int[] right = new int[n];int[] height = new int[n];Arrays.fill(right, n);int cur_left = 0;int cur_right = n;int res = 0;for (int i = 0; i < m; i++) {cur_left = 0;cur_right = n;for (int j = 0; j < n; j++) {if (matrix[i][j] == '1')height[j]++;elseheight[j] = 0;}for (int j = 0; j < n; j++) {if (matrix[i][j] == '1') {left[j] = Math.max(left[j], cur_left);} else {left[j] = 0;cur_left = j + 1;}}for (int j = n - 1; j >= 0; j--) {if (matrix[i][j] == '1') {right[j] = Math.min(right[j], cur_right);} else {right[j] = n;cur_right = j;}}for (int j = 0; j < n; j++)res = Math.max(res, (right[j] - left[j]) * height[j]);}return res;}public static void main(String[] args) {char[][] matrix = new char[][]{{'1', '0', '1', '0', '0'}, {'1', '0', '1', '1', '1'}, {'1', '1', '1', '1', '1'}, {'1', '0', '0', '1', '0'}};Solution solution = new Solution();int i = solution.maximalRectangle(matrix);System.out.println(i);}
}

Java 练习 1.三角形最小路径和 2.外出采摘的日本人 3.最大矩形相关推荐

  1. leetcode--笔记——120. 三角形最小路径和

    120. 三角形最小路径和 给定一个三角形 triangle ,找出自顶向下的最小路径和. 每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一 ...

  2. 算法:三角形最小路径和

    题目 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [[2],[3,4],[6,5,7],[4,1,8,3] ] 1 2 3 4 5 6 自顶向 ...

  3. leetcode - 120. 三角形最小路径和

    120. 三角形最小路径和 ------------------------------------------ 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如 ...

  4. 动态规划之求解三角形最小路径问题

    求解三角形最小路径问题 一.[问题描述]: 给定 高度为n的一个整数三角形,找出从顶部到底部的最小路径和,只能向先移动相邻的结点.首先输入n,接下来的1~n行,第i行输入i个整数,输出分为2行,第一行 ...

  5. 算法-------三角形最小路径和(Java版本)

    题目 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点.例如,给定三 ...

  6. [Leetcode][第120题][JAVA][三角形最小路径和][动态规划][递归]

    [问题描述][中等] [解答思路] 1. 动态规划思路一 自上而下 第 1 步:设计状态 f[i][j] 表示从三角形顶部走到位置 (i,j) 的最小路径和 位置(i,j) 指的是三角形中第 i 行第 ...

  7. 【Java语言】力扣系列----120. 三角形最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点. 例如,给定三角 ...

  8. Leetcode--120. 三角形最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [      [2],     [3,4],    [6,5,7],   [4,1,8,3] ] ...

  9. Leetcode 120. 三角形最小路径和 (每日一题 20210927)

    给定一个三角形 triangle ,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点 ...

最新文章

  1. 今年Java面试必问的这些技术面,看完这一篇你就懂了
  2. 【python】点分十进制ip与数字互转
  3. 缓存失效策略(FIFO,LRU,LFU)
  4. 素数筛选以及优化分析
  5. c语言链表p-%3enext,课程设计报告.c语言程序设计.pdf
  6. 程 序 测 试 规 范
  7. java new string编码_Java String 类型编码转换
  8. 单片机原理及应用 C51编程 proteus仿真
  9. FIR滤波器窗函数设计法——汉明窗设计实例
  10. Android ActivityManager常用方法
  11. 价值函数与贝尔曼方程
  12. Win10防止Windows安全中心(Windows Defender)乱删文件
  13. 修改Java文件不用重启Tomcat服务
  14. 【有利可图网】PS实战教程26:1分钟搞定抠头发丝,超简单!
  15. FCC算法和数据结构 项目实战:罗马数字转换器
  16. 单相逆变器的建模与仿真
  17. 拍好人像的六个好招数
  18. Skleran-线性模型-最小角回归(LARS)
  19. 自己动手做聊天机器人 一-涉及知识
  20. 二维码制作方法有什么?看完这篇你就会了

热门文章

  1. 我是怎么招聘程序员的——引自大牛【陈皓】
  2. Android 8.0 App内切换语言不生效的问题记录
  3. vue打包的文件加上版本号
  4. 全麦吐司和普通吐司的区别_全麦面包和普通面包的区别有哪些?
  5. Box2D v2.1.0用户手册翻译 - 第12, 13, 14章
  6. Office PPT录屏功能
  7. python笔记 - 序列(四)
  8. linux dvd视频,Gentoo Linux 10.1 LiveDVD快速安装法(视频)
  9. 【Coursera】DNS Chooser找到最快IP的上网加速工具
  10. java3d翻转纪念相册_js实现3D旋转相册