当前位置: 首页 > news >正文

33.递归、搜索、回溯之记忆化搜索

1.斐波那契数(easy)

. - 力扣(LeetCode)

题目解析

斐波那契数列

算法原理

解法一:递归

解法二:记忆化搜索

【另一种形式的剪枝】

【带备忘录的递归】

 代码

解法三:动态规划

代码 

2.不同路径

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int uniquePaths(int m, int n) {// 动态规划int[][] dp = new int[m + 1][n + 1];dp[1][1] = 1;for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++) {if (i == 1 && j == 1)continue;dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}return dp[m][n];// 记忆化搜索// int[][] memo = new int[m + 1][n + 1];// return dfs(m, n, memo);}public int dfs(int i, int j, int[][] memo) {if (memo[i][j] != 0) {return memo[i][j];}if (i == 0 || j == 0)return 0;if (i == 1 && j == 1) {memo[i][j] = 1;return 1;}memo[i][j] = dfs(i - 1, j, memo) + dfs(i, j - 1, memo);return memo[i][j];}
}

3.最长递增子序列

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int lengthOfLIS(int[] nums) {int n = nums.length;int[] dp = new int[n];int ret = 0;Arrays.fill(dp, 1);// 填表顺序: 从后往前for (int i = n - 1; i >= 0; i--) {for (int j = i + 1; j < n; j++) {if (nums[j] > nums[i]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}ret = Math.max(ret, dp[i]);}return ret;// 记忆化搜索// int ret = 0;// int n = nums.length;// int[] memo = new int[n];// for(int i = 0; i < n; i++)// {// ret = Math.max(ret, dfs(i, nums, memo));// }// return ret;}public int dfs(int pos, int[] nums, int[] memo) {if (memo[pos] != 0)return memo[pos];int ret = 1;for (int i = pos + 1; i < nums.length; i++) {if (nums[i] > nums[pos]) {ret = Math.max(ret, dfs(i, nums, memo) + 1);}}memo[pos] = ret;return ret;}
}

4.猜数字大小II

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {int[][] memo;public int getMoneyAmount(int n) {memo = new int[n + 1][n + 1];return dfs(1, n);}public int dfs(int left, int right) {if (left >= right)return 0;if (memo[left][right] != 0) {return memo[left][right];}int ret = Integer.MAX_VALUE;for (int head = left; head <= right; head++) {int x = dfs(left, head - 1);int y = dfs(head + 1, right);ret = Math.min(Math.max(x, y) + head, ret);}memo[left][right] = ret;return ret;}
}

5.矩阵中的最长递增路径

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {int m, n;int[] dx = { 0, 0, 1, -1 };int[] dy = { 1, -1, 0, 0 };int[][] memo;public int longestIncreasingPath(int[][] matrix) {m = matrix.length;n = matrix[0].length;memo = new int[m][n];int ret = 0;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)ret = Math.max(ret, dfs(matrix, i, j));return ret;}public int dfs(int[][] matrix, int i, int j) {if (memo[i][j] != 0) {return memo[i][j];}int ret = 1;for (int k = 0; k < 4; k++) {int x = i + dx[k], y = j + dy[k];if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j]) {ret = Math.max(ret, dfs(matrix, x, y) + 1);}}memo[i][j] = ret;return ret;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024 年最佳 Chrome 验证码扩展,解决 reCAPTCHA 问题
  • 秋招突击——9/10、9\11——算法练习——携程笔试练习——2024年秋招第一批笔试
  • MYSQL数据库——MYSQL管理
  • 鸿蒙开发入门day19-使用NDK接口构建UI(二)
  • qt使用对数坐标的例子,qchart用QLogValueAxis坐标不出图解决
  • 第J3-1周:DenseNet算法 实现乳腺癌识别(pytorch)
  • 【Echarts】vue3打开echarts的正确方式
  • 惬意享受阅读,优雅的微信公众号订阅方式,极空间部署『WeWe RSS』
  • C++函数在库中的地址
  • java面向对象:构造方法
  • PMP--一模--解题--131-140
  • 感知器神经网络
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——12.二叉树(习题)
  • 【Kubernetes】常见面试题汇总(十)
  • 代码随想录训练营第34天|dp前置转移
  • AWS实战 - 利用IAM对S3做访问控制
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES6 ...操作符
  • JAVA_NIO系列——Channel和Buffer详解
  • Less 日常用法
  • php的插入排序,通过双层for循环
  • 大整数乘法-表格法
  • 讲清楚之javascript作用域
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 目录与文件属性:编写ls
  • 那些被忽略的 JavaScript 数组方法细节
  • 思考 CSS 架构
  • 一个完整Java Web项目背后的密码
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​ubuntu下安装kvm虚拟机
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #DBA杂记1
  • #include到底该写在哪
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #pragam once 和 #ifndef 预编译头
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (三)模仿学习-Action数据的模仿
  • (十)c52学习之旅-定时器实验
  • (十六)视图变换 正交投影 透视投影
  • (一)、python程序--模拟电脑鼠走迷宫
  • (原)本想说脏话,奈何已放下
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET处理HTTP请求
  • .net和php怎么连接,php和apache之间如何连接
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET企业级应用架构设计系列之结尾篇
  • .NET下的多线程编程—1-线程机制概述
  • .NET学习教程二——.net基础定义+VS常用设置