[剑指offer]面试题第[47]题[JAVA][礼物的最大价值][动态规划]
【问题描述】[中等]
【解答思路】
1动态规划
动态规划流程
第 1 步:设计状态
f(i, j)f(i,j) 为从棋盘左上角走至单元格 (i ,j)(i,j) 的礼物最大累计价值
第 2 步:状态转移方程
f(i,j)=max[f(i,j−1),f(i−1,j)]+grid(i,j)
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩
时间复杂度:O(N^2) 空间复杂度:O(1)
class Solution {public int maxValue(int[][] grid) {//m 列数 n 行数int m = grid.length, n = grid[0].length;for(int j = 1; j < n; j++) // 初始化第一行grid[0][j] += grid[0][j - 1];for(int i = 1; i < m; i++) // 初始化第一列grid[i][0] += grid[i - 1][0];for(int i = 1; i < m; i++)for(int j = 1; j < n; j++) grid[i][j] += Math.max(grid[i][j - 1], grid[i - 1][j]);return grid[m - 1][n - 1];}
}
【总结】
1. 动态规划流程
第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩
2. 压缩空间可以在原数组上操作 行列
3.想清楚应该加什么,切忌想当然
3.类似题目[Leetcode][第64题][JAVA][64. 最小路径和]
[剑指offer]面试题第[47]题[JAVA][礼物的最大价值][动态规划]相关推荐
- [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]
[问题描述][中等] [解答思路] 1. 暴力 复杂度分析 class MaxQueue {Queue<Integer> queue = new LinkedList();int maxV ...
- [剑指offer]面试题第[60]题[JAVA][n个骰子的点数][动态规划][空间优化]
[问题描述][中等] 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率.你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集 ...
- [剑指offer]面试题第[55-1]题[JAVA][二叉树的深度][BFS][DFS]
[问题描述][简单] 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度.例如:给定二叉树 [3,9,20,null,nul ...
- [剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]
[问题描述] 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- [剑指offer]面试题第[36]题[JAVA][二叉搜索树与双向链表][递归]
[问题描述][中等] [解答思路] 中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {Node pre, head;public Node treeToDoubly ...
- [剑指offer]面试题第[44]题[JAVA][数字序列中某一位的数字][找规律]
[问题描述][中等] [解答思路] 找规律 时间复杂度:O(logN) 空间复杂度:O(logN) class Solution {public int findNthDigit(int n) {in ...
- [剑指offer]面试题第[45]题[JAVA][把数组排成最小的数][快排][ Comparator][PriorityQueue]
[问题描述][中等] [解答思路] 1. 快速排序 时间复杂度:O(N^2) 空间复杂度:O(1) class Solution {public String minNumber(int[] nums ...
- [剑指offer]面试题第[65]题[JAVA][不用加减乘除做加法][位运算]
[问题描述][简单] [解答思路] 1. 位运算 时间复杂度:O(1) 空间复杂度:O(1) public int add(int a, int b) {while(b != 0) { // 当进位为 ...
- [剑指offer]面试题第[61]题[JAVA][扑克牌中的点数][HashSet][数组]
[问题描述][简单] [解答思路] 1. 集合 Set + 遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public boolean isStraight(int ...
最新文章
- Android NDK JNI 简单例子2
- Sublime Text(2/3)编译lua
- Idea配置spark环境及编写scala代码
- 基于 Flink 的严选实时数仓实践
- boost::fusion::pop_front用法的测试程序
- DCMTK:OFStandard中“转换为标记”代码的测试程序
- 基于 ida 的反汇编转换 Obj 的可行性 笔记(2)
- JavaScript试题练习题
- LeetCode题——最长无重复子串
- ubuntu 下eclipse 启动时出现An error has occurred. See the log file的问题
- bzoj 1562 [NOI2009]变换序列 二分图
- 多线程编程(7) - 从 CreateThread 说起[续五]
- Python+OpenCV:Hough直线检测(Hough Line Transform)
- 支持ipv6类型的ddos测试工具thc-ipv6
- npm webstorm配置_怎样使用webstorm中配置nodejs环境及npm
- 机器学习实战—FPGrowth算法的实现
- mf4350d驱动下载linux,佳能 imageCLASS MF4350d 驱动程序下载-更新佳能软件(打印机)
- 流程管理体系实施策略
- Ubuntu18.04 无法解析域名
- javascript技巧搜集。
热门文章
- websocket + node.js聊天系统
- uilabel 自适应
- maya计算机内存不足请保存,Maya内存不足不能渲染怎么优化场景?
- 用excel制作双层饼图_双层饼图,让你的工作更出彩
- html生成1-32位随机数,如何生成一个32位的随机数 | 求索阁
- 如何关闭线程池?会创建不会关闭?调用关闭方法时线程池里的线程如何反应?
- 为何setRequestMethod(GET)不生效
- Android百度云推送接入,附完整代码
- ALIN10129-自查方案
- ubuntu18.04安装mysql8