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

力扣300.最长递增子序列(经典dp)力扣375.猜数字II力扣.329矩阵最长的递增子序列力扣.33搜索旋转排序数组

目录

 力扣300.最长递增子序列(经典dp)

力扣375.猜数字II

力扣.329矩阵最长的递增子序列

力扣.33搜索旋转排序数组


 力扣300.最长递增子序列(经典dp)

以xx为后缀的最长递增子序列

class Solution {public int lengthOfLIS(int[] nums) {int n=nums.length;int[]dp=new int[n];Arrays.fill(dp,1);int max=1;for(int i=1;i<n;i++){for(int j=0;j<i;j++){if(nums[i]>nums[j])dp[i]=Math.max(dp[j]+1,dp[i]);}max=Math.max(dp[i],max);}return max;
}
}

力扣375.猜数字II

从[1-i-1] [i+1, 200]里面挑选, 里面不一定谁大谁小

x代表左边所有种情况的最小值,y表示右边的所有最小值

此时为什么要x,y的最大值呢   ,我在根节点处理的是最大情况,确保整个情况都是完胜,即左右都要获得胜利,不管你选什么,我的这个策略都是最好的,优秀的。

class Solution {int[][]mono;public int dfs(int l,int r){
//假如==2的时候,那么就是【1,1的区间】那么就这一个数,那就不需要花钱的
//即left==right的时候if(l>=r)return 0;if(mono[l][r]!=-1)return mono[l][r];int min=0x3f3f3f3f;for(int i=l;i<=r;i++){//假如i==1的话 就不是合法区间int x=dfs(l,i-1);int y=dfs(i+1,r);//为什么要统计x,y的最大值,因为我找到的是左边,右边满足赢整个游戏的值,因此是最大值//他的统计左右节点,是不计算当前节点的值,当前节点的值,在下面被添加min=Math.min(Math.max(x,y)+i,min);}mono[l][r]=min;return min;}//最小金额,不是最小次数,因此二分并非最优,所以暴力枚举去判断public int getMoneyAmount(int n) {mono=new int[n+1][n+1];for(int i=0;i<n;i++){Arrays.fill(mono[i],-1);}return dfs(1,n);}
}

力扣.329矩阵最长的递增子序列

这个有点微微细节的记忆化搜索,跟bfs不同的是,第一个他不用存储是否走过,即vis,因为

不断递增,无需dfs,然后第二个dfs,最开始的值都必须要是1,因为即使没有任何一个值和他匹配递增的关系,他自己也是1个长度。

class Solution {int[][]mono;int[]dx={0,0,1,-1};int[]dy={1,-1,0,0};public int dfs(int i,int j,int[][] matrix){int n=matrix.length;int m=matrix[0].length;if(mono[i][j]!=-1)return mono[i][j];int count=0;for(int k=0;k<4;k++){int x=i+dx[k];int y=j+dy[k];//我找的是递增,所以不可能重复if(x>=0&&x<n&&y>=0&&y<m&&matrix[x][y]>matrix[i][j]){count=Math.max(dfs(x,y,matrix)+1,count);}}mono[i][j]=Math.max(count,1);return mono[i][j];}public int longestIncreasingPath(int[][] matrix) {int n=matrix.length;int m=matrix[0].length;mono=new int[n][m];int max=0;for(int i=0;i<n;i++) {Arrays.fill(mono[i], -1);}for(int i=0;i<n;i++){for(int j=0;j<m;j++){max=Math.max(max,dfs(i,j,matrix));}}return max;}
}

力扣.33搜索旋转排序数组

A-B   :    nums[i]>nums[n-1]

C-D :      nums[i]<=nums[n-1] 

http://www.dtcms.com/a/399286.html

相关文章:

  • Kasaraju 算法详解:强连通分量(SCC)检测与循环依赖分析
  • python+springboot+vue的食物营养分析与推荐网站
  • 网站前端开发工具有哪些?常用网站前端开发工具推荐、网站前端开发工具对比与最佳实践分享
  • SMBJ 简单使用指南 实现在 Java/Android 程序中访问 SMB 服务器
  • 做网站市场价关键词首页排名优化价格
  • 给菠菜网站做外包网站主持人制作方法
  • C#性能优化实战:多线程与异步编程技巧详解
  • 网站开发 报价单 表格免费网络电视直播
  • 软件测试自动化率和自动化误报率
  • 储能电池包的自动化产线探秘|深圳比斯特自动化
  • 企业内部网站开发电商网站设计岗位主要是
  • 为什么自己做的网站打开是乱码上海自助建站系统
  • Spring AOP + Redisson 实现基于注解的分布式限流方案
  • VMware 性能优化完整指南
  • Vue 3 项目实战教程大事件管理系统 (一):从零开始搭建项目基础
  • 手机Nexus5 安装 Linux(3) - python3
  • vue el-form 自定义校验, 校验用户名调接口查重
  • 大型网站开发团队北京市轨道交通建设管理有限公司网站
  • 【力扣LeetCode】 349_两个数组的交集
  • 学校做好网站建设目的优化优化
  • 【论文阅读】-《Attention Is All You Need》(Transformer)
  • 网站开发工程师任职资格关于建设殡葬网站的报告范文
  • 北京市保障性住房建设投资中心网站6山东省住房和城乡建设部网站首页
  • 【SpringBoot】27 核心功能 - Web开发原理 - Spring MVC中的定制化原理
  • 自动化接口框架搭建分享-pytest
  • 锦州市做网站建设部网站职业资格证查询
  • cpp类与对象
  • 网站建设管理工作沈阳企业免费建站
  • 算法训练.15
  • 【算法】滑动窗口(一)-长度最小的子数组