力扣150题——多维动态规划

news2024/9/20 16:46:02

交错字符串

题目

97. 交错字符串 - 力扣(LeetCode)

思路

用dp[i][j]代表s1的前i个字母和s2的前j个字母能否交错组成s3的前i+j-1的子串

状态转移方程即为

  • 如果 s1[i-1] == s3[i + j - 1],并且 dp[i-1][j] 为 true,则 dp[i][j] 也为 true。
  • 如果 s2[j-1] == s3[i + j - 1],并且 dp[i][j-1] 为 true,则 dp[i][j] 也为 true。

代码

public boolean isInterleave(String s1, String s2, String s3) {
        int n=s1.length(),m=s2.length(),l=s3.length();
        if(n+m!=l){
            return false;
        }
        boolean[][] dp = new boolean[n+1][m+1];
        dp[0][0] = true;
        for(int i=1;i<=n;i++){
            dp[i][0]=dp[i-1][0]&&s1.charAt(i-1)==s3.charAt(i-1);
        }
        for(int i=1;i<=m;i++){
            dp[0][i]=dp[0][i-1]&&s2.charAt(i-1)==s3.charAt(i-1);
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(dp[i-1][j]&&s1.charAt(i-1)==s3.charAt(i+j-1)){
                    dp[i][j]=true;
                }else if(dp[i][j-1]&&s2.charAt(j-1)==s3.charAt(i+j-1)){
                    dp[i][j]=true;
                }
            }
        }
        return dp[n][m];
    }

买卖股票的最佳时机Ⅲ

题目

123. 买卖股票的最佳时机 III - 力扣(LeetCode)

思路

  • 设 dp[i][j][0] 表示第 i 天,最多进行 j 次交易,并且当前不持有股票的最大利润。
  • 设 dp[i][j][1] 表示第 i 天,最多进行 j 次交易,并且当前持有股票的最大利润。

状态转移方程:

  • dp[i][k][0] = max(dp[i-1][j][0], dp[i-1][j][1] + prices[i])
    • 即今天不持有股票有两种情况:
    • 昨天也不持有股票,或者
    • 昨天持有股票,今天卖出股票。
  • dp[i][k][1] = max(dp[i-1][j][1], dp[i-1][j-1][0] - prices[i])
    • 即今天持有股票也有两种情况:
    • 昨天也持有股票,或者
    • 昨天不持有股票,今天买入股票。

代码

public int maxProfit(int[] prices) {
        int n = prices.length;
        if(n==0){
            return 0;
        }
        int[][][] dp = new int[n][3][2];
       for(int i=0;i<3;i++){
           dp[0][i][0]=0;
           dp[0][i][1]=-prices[0];
       }

       for(int i=1;i<n;i++){
           for(int j=1;j<3;j++){
               dp[i][j][0]=Math.max(dp[i-1][j][0],dp[i-1][j][1]+prices[i]);
               dp[i][j][1]=Math.max(dp[i-1][j][1],dp[i-1][j-1][0]-prices[i]);
           }
       }
       return dp[n-1][2][0];
    }

买卖股票的最佳时机Ⅳ

题目

188. 买卖股票的最佳时机 IV - 力扣(LeetCode)

思路

只需要在上一题的基础上讲k的值化为动态的,并且最后遍历所有的K,找出能达到最大利益的K,并返回最大值。

代码

public int maxProfit(int k, int[] prices) {
        int n = prices.length;
        if(n==0||k==0){
            return 0;
        }
        int[][][] dp = new int[n][k+1][2];
        for(int i=0;i<=k;i++){
            dp[0][i][0]=0;
            dp[0][i][1]=-prices[0];
        }

        for(int i=1;i<n;i++){
            for(int j=1;j<=k;j++){
                dp[i][j][0]=Math.max(dp[i-1][j][0],dp[i-1][j][1]+prices[i]);
                dp[i][j][1]=Math.max(dp[i-1][j][1],dp[i-1][j-1][0]-prices[i]);
            }
        }
        int max = Integer.MIN_VALUE;
        for(int i=0;i<=k;i++){
            max = Math.max(dp[n-1][i][0],max);
        }
        return max;
    }

最大正方形

题目

221. 最大正方形 - 力扣(LeetCode)

思路

  • dp[i][j] 表示以位置 (i, j) 作为正方形右下角的最大正方形的边长。
  • 若 matrix[i][j] == '1',则 dp[i][j] 的值由 dp[i-1][j](上)、dp[i][j-1](左)和 dp[i-1][j-1](左上)的最小值加1决定。

代码

public int maximalSquare(char[][] matrix) {
        int n = matrix.length;
        if(n==0){
            return 0;
        }
        int m = matrix[0].length;
        int[][] dp = new int[n][m];
        int max = Integer.MIN_VALUE;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(matrix[i][j]=='1'){
                    if(i==0||j==0){
                        dp[i][j]=1;
                    }else{
                        dp[i][j]=Math.min(dp[i-1][j],Math.min(dp[i-1][j-1],dp[i][j-1]))+1;
                    }
                    max = Math.max(max,dp[i][j]);
                }
            }
        }
        return max*max;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剪画:一带一路机遇下,自媒体如何跨越语言障碍!

随着国家 “一带一路” 的持续推进&#xff0c;我国的文化魅力如璀璨星辰&#xff0c;在世界舞台上熠熠生辉。美食的独特风味、华服的精美绝伦&#xff0c;越来越受到外国人的喜爱。这对于做自媒体的小伙伴们而言&#xff0c;无疑是一个巨大的机遇。 然而&#xff0c;机遇往往与…

利用Leaflet.js和turf.js创建交互式地图:航道路线绘制

引言 在现代Web应用中&#xff0c;地图的交互性是提供丰富用户体验的关键。Leaflet.js是一个轻量级的开源JavaScript库&#xff0c;它提供了简单易用的API来构建交云的地图。与此同时&#xff0c;turf.js作为一个强大的地理空间分析库&#xff0c;能够处理复杂的地理数据操作。…

Broadcast:Android中实现组件及进程间通信

目录 一&#xff0c;Broadcast和BroadcastReceiver 1&#xff0c;简介 2&#xff0c;广播使用 二&#xff0c;静态注册和动态注册 三&#xff0c;无序广播和有序广播 1&#xff0c;有序广播的使用 2&#xff0c;有序广播的截断 3&#xff0c;有序广播的信息传递 四&am…

AI产品经理面试100问,三天看完一周拿4个offer

AI产品经理面试100问 Attention(重点掌握) 1.什么是 Attention?为什么要用 Attention?它有什么作用? 2.Attention的流程是什么样的? 3.普通的Attention和Transformer的Self-attention之间有什么关系? 4.什么是Self-attention? Transformer(重点掌握) 1.Transformer是什…

[Linux]:信号(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的引入 1.1 信号的概念 在Linux系统中&#xff0c;信号&#xff08;…

在泰国旅游不会口语怎么办?求推荐翻译软件!!!

如果在泰国旅游时遇到语言障碍&#xff0c;可以采取以下措施&#xff1a;学习一些基础的泰语短语&#xff0c;使用翻译应用程序&#xff0c;携带翻译卡片&#xff0c;利用身体语言&#xff0c;参加有导游的旅行团&#xff0c;选择提供中文服务的酒店和旅行社&#xff0c;使用地…

【leetcode】字典 哈希表习题

1.两数之和&#xff08;查找表法-哈希表&#xff09; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次…

【人工智能学习笔记】7_智能语音技术基础

智能语音技术概述 智能语音技术通过对语音进行分析、理解和合成,是计算机设备实现“能听会说”、具备自然语音交流的技术能力。其涉及的范围主要有: 语音合成技术语音识别技术语音测评技术语音降噪与增强技术…智能语音技术的研究内容 智能语音技术的研究难点 智能语音技术…

旅行社区应该如何规划?

近年来&#xff0c;旅游行业逐渐恢复&#xff0c;包括微度假、精致露营、康养旅游、乡村民宿等旅游模式。用户旅游支出、旅游人次逐渐恢复&#xff0c;旅游收入仍待提升。 那么旅游社区应该如何搭建&#xff0c;内容如何规划呢&#xff1f; 我们了解到&#xff0c;很多旅游网…

哪个快?用300万个图斑测试ArcGIS Pro的成对叠加与经典叠加

​​​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 在使用ArcGIS Pro的过程中&#xff0c;很多朋友发现&#xff0c;Pro有个成对叠加工具集。很多…

PSG3D V2024 注册机 蓝天大数据三维测绘系统

PSG3D2024三维测绘系统是基于 AutoCAD 平台开发的&#xff0c;以“智能、 专业、高效、易学”为设计目标开发的全新一代地理数据采集、编辑 和联动的专业软件。 系统集成了三维测图、坐标转换、地形处理、数字地模、无人机 辅助、不动产调查、土地确权、部件普查和数据转换等专…

数字产业中心:技术赋能产业,如何重塑行业格局!

在数字化浪潮的推动下&#xff0c;数字产业中心正逐步成为推动经济转型升级的重要引擎。这里&#xff0c;技术不仅仅是工具&#xff0c;更是重塑行业格局、引领未来发展的核心力量。 一、技术融合创新&#xff0c;打破传统边界 数字产业中心通过云计算、大数据、人工智能等前沿…

【Python】练习:控制语句(二)第1关

第1关&#xff1a;分支结构基础实训 第一题第二题第三题第四题&#xff08;※&#xff09;第五题&#xff08;※&#xff09;第六题第七题 第一题 #第一题 for temp in [-280, -100, 0, 20, 120, 200]:#请在下面编写代码# ********** Begin ********** #if temp>-273.15:F9/…

【Git 操作】Git 的基本操作

文章目录 1. Git 的配置2. 工作区、暂存区、版本库 1. Git 的配置 &#x1f427;①首先要新建一个目录&#xff0c;该目录用于放项目代码&#xff0c;在该目录下执行git init命令&#xff0c;用于创建一个 Git的本地仓库。 .git ⽬录是 Git 来跟踪管理仓库的。&#x1f427;②…

原生+jquery写自动消失的提示框

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>自动消失消息提示</title> <style>/…

linux内核 devtmpfs介绍

文章目录 概要整体架构流程技术细节 概要 提示&#xff1a;这里可以添加技术概要 linux内核中 devtmpfs实现介绍 内核版本&#xff1a;5.10 Devtmpfs在Linux中是一个特殊的设备文件系统&#xff0c;主要用来linux内核中加速启动过程和管理设备节点。高版本的linux基本都是使用…

25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的二手电子设备交…

【渗透测试】——VulnHub靶机渗透实战 | HA:Joker

&#x1f4d6; 前言&#xff1a;Vulnhub 是一个漏洞靶场平台&#xff0c;里面含有大量的靶场镜像&#xff0c;只需要下载虚拟机镜像&#xff0c;导入 VMWare 或者 VirtualBox 即可启动靶场。本文将从环境搭建、端口扫描、目录扫描到信息提取和突破8080端口&#xff0c;尽可能排…

Cesium Shader 广告牌纹理动画

Cesium Shader 广告牌纹理动画 Cesium 在广告牌, 自定义shader实现播放spritesheet. 图片资源: https://www.codeandweb.com/free-sprite-sheet-packer Cesium Shader 广告牌纹理动画

MySQL高阶1843-可疑银行账户

目录 题目 准备数据 ​分析数据 实现 总结 题目 如果一个账户在 连续两个及以上 月份的 总收入 超过最大收入&#xff08;max_income&#xff09;&#xff0c;那么认为这个账户 可疑。 账户当月 总收入 是当月存入资金总数&#xff08;即 transactions 表中 type 字段的…