力扣爆刷第101天之hot100五连刷91-95

力扣爆刷第101天之hot100五连刷91-95

文章目录

      • 力扣爆刷第101天之hot100五连刷91-95
      • 一、62. 不同路径
      • 二、64. 最小路径和
      • 三、5. 最长回文子串
      • 四、1143. 最长公共子序列
      • 五、72. 编辑距离

一、62. 不同路径

题目链接:https://leetcode.cn/problems/unique-paths/description/?envType=study-plan-v2&envId=top-100-liked
思路:求不同路径,任意一个位置都可以从它的上方和左方推出,也就是dp[i][j] = dp[i][j-1] + dp[i-1][j],压缩数组为dp[j] = dp[j] + dp[j-1];
在这里插入图片描述

class Solution {
    public int uniquePaths(int m, int n) {
        int[] dp = new int[n];
        dp[0] = 1;
        for(int i = 0; i < m; i++) {
            for(int j = 1; j < n; j++) {
                dp[j] = dp[j] + dp[j-1];
            }
        }
        return dp[n-1];
    }
}

二、64. 最小路径和

题目链接:https://leetcode.cn/problems/minimum-path-sum/description/?envType=study-plan-v2&envId=top-100-liked
思路:求最小路径和,每一个位置可以从当前位置的上方和左方推出,但是只需要这两者中的最小值加上当前值,即可得到结构。
dp[j] = Math.min(dp[j], dp[j-1]) + nums[i][j]。
在这里插入图片描述

class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length, n = grid[0].length;
        int[] dp = new int[n+1];
        Arrays.fill(dp, Integer.MAX_VALUE);
        
        for(int i = 0; i < m; i++) {
            for(int j = 1; j <= n; j++) {
                int t = Math.min(dp[j], dp[j-1]);
                t = t == Integer.MAX_VALUE ? 0 : t;
                dp[j] = t + grid[i][j-1];
            }
        }
        return dp[n];
    }
}


三、5. 最长回文子串

题目链接:https://leetcode.cn/problems/longest-palindromic-substring/description/?envType=study-plan-v2&envId=top-100-liked
思路:求最长回文子串需要遍历所有的位置,从每一个位置开始,向两边扩散,可以是单点中心扩散,可以是双点中心扩散,然后遍历判断记录即可。

class Solution {
    public String longestPalindrome(String s) {
        String max = "";
        for(int i = 0; i < s.length(); i++) {
            String s1 = find(s, i, i);
            String s2 = find(s, i, i+1);
            max = s1.length() > max.length() ? s1 : max;
            max = s2.length() > max.length() ? s2 : max;
        }
        return max;
    }

    String find(String s, int left, int right) {
        while(left >= 0 && right < s.length()) {
            if(s.charAt(left) == s.charAt(right)) {
                left--;
                right++;
            }else{
                break;
            }
        }
        return s.substring(left+1, right);
    }
}

四、1143. 最长公共子序列

题目链接:https://leetcode.cn/problems/longest-common-subsequence/description/?envType=study-plan-v2&envId=top-100-liked
思路:求最长公共子序列,如text1 = “abcde”, text2 = “ace” ,定义dp[i][j]表示区间[0, i] 和区间[0, j]中以text1[i]和text2[j]字符为结尾,如果二者相等则 dp[i+1][j+1] = dp[i][j] + 1;如果二者不等则 dp[i+1][j+1] = Math.max(dp[i+1][j], dp[i][j+1]);
1 1 1
1 1 1
1 2 2
1 2 2
1 2 3

class Solution {
     public int longestCommonSubsequence(String text1, String text2) {
        int m = text1.length(), n = text2.length();
        int[][] dp = new int[m+1][n+1];
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(text1.charAt(i) == text2.charAt(j)) {
                    dp[i+1][j+1] = dp[i][j] + 1;
                }else{
                    dp[i+1][j+1] = Math.max(dp[i+1][j], dp[i][j+1]);
                }
            }
        }
        return dp[m][n];
    }
}


五、72. 编辑距离

题目链接:https://leetcode.cn/problems/edit-distance/description/?envType=study-plan-v2&envId=top-100-liked
思路:求最少操作步骤,定义dp[i][j]表text1以索引 i 结尾,text2以索引 j 结尾的最长相等子序列,当结尾相等,自然操作数延续上一个位置,dp[i+1][j+1] = dp[i][j];,如果不等,可以考虑从左边,上边,左上角。
0 1 2 3
1 1 2 3
2 2 2 2
3 2 2
4
0

class Solution {
   public int minDistance(String word1, String word2) {
        int m = word1.length(), n = word2.length();
        int[][] dp = new int[m+1][n+1];
        for(int i = 0; i < dp.length; i++) dp[i][0] = i;
        for(int i = 0; i < dp[0].length; i++) dp[0][i] = i;
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(word1.charAt(i) == word2.charAt(j)) {
                    dp[i+1][j+1] = dp[i][j];
                }else{
                    dp[i+1][j+1] = Math.min(Math.min(dp[i+1][j], dp[i][j+1]), dp[i][j]) + 1;
                }
            }
        }
        return dp[m][n];
    }
}


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

Python代码规范化

什么是代码规范化&#xff1f; 代码的规范化书写是指按照一定的规范和标准编写代码&#xff0c;使得代码结构清晰、易于阅读和理解。 代码规范化的意义 Python代码规范化的意义在于提高代码可读性、可维护性和可重用性&#xff0c;从而使代码更易于理解、调试和协作&#xff0c…

QKSMS:安卓开源短信应用的替代之选

QKSMS&#xff1a;安卓开源短信应用的替代之选 1. 引言 QKSMS是一个开源的安卓短信应用&#xff0c;旨在取代安卓系统自带的短信应用。它目前可以在Google Play商店和F-Droid上获取&#xff0c;并被誉为安卓平台上最美观的短信应用之一。本文将介绍QKSMS的特点、功能和优势&am…

一分钟了解自动化测试【建议收藏】

引子 写在最前面&#xff1a;目前自动化测试并不属于新鲜的事物&#xff0c;或者说自动化测试的各种方法论已经层出不穷&#xff0c;但是&#xff0c;能够明白自动化测试并很好落地实施的团队还不是非常多&#xff0c;我们接来下用通俗的方式来介绍自动化测试…… 本文共有2410…

TouchGFX之性能测量

TouchGFX Core开放了几个信号&#xff0c;可用于测量性能。 当这些信号在内部触发时&#xff0c;用户可在应用程序中同步触发单个GPIO&#xff0c;从而实现“渲染时间”和其他有用信号的可视化。 信号在GPIO.hpp中定义 /* 用于操作GPIO的接口类&#xff0c;以便在目标硬件上进…

中通快递邀您参观2024杭州快递物流供应链与技术装备展览会

2024.7.8-10 杭州国际博览中心 科技创新&#xff0c;数字赋能 同期举办&#xff1a;数字物流技术展 新能源商用车及物流车展 电商物流包装展 冷链物流展 展会介绍 深度布局产业集群&#xff0c;加速赋能科技创新2024长三角快递物流展是亚洲范围内超大规模的快递物流业展示平…

plasmo开发浏览器插件MAIN模式的content脚本和普通模式content脚本通讯方案

plasmo是一个很棒的开发浏览器插件的框架&#xff0c;可以使用react和vue等语言开发&#xff0c;也是目前github上star数量最多的开发浏览器插件的框架。 github仓库地址&#xff1a;GitHub - PlasmoHQ/plasmo: &#x1f9e9; The Browser Extension Framework 官网地址&…

每秒批量插入10000条数据到MySQL中,资源消耗(带宽、IOPS)有多少?

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容起因代码资源情况改造 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、…

使用Cpolar异地组网,在vscode上ssh远程开发ubuntu主机

目录 开发环境 操作流程 参考资料 在机器人被搬到另一个屋之后&#xff0c;通过局域网进行ssh开发就变成了个困难的问题。因此尝试了异地组网来解决这个问题&#xff0c;看了一些资料后发现基于cpolar进行异地组网也不困难&#xff0c;这里记录一下步骤。 开发环境 硬件&…

onlyoffice创建excel文档

前提 安装好onlyoffice然后尝试api开发入门 编写代码 <html> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"&…

在Linux环境底下 用C语言执行Python程序

在Linux环境底下 用C语言执行Python程序 文章目录 在Linux环境底下 用C语言执行Python程序1、环境安装&检测2、C语言调用Python语句2.1 直接调用python语句2.2 调用无参python函数2.3 调用有参python函数 1、环境安装&检测 通过C语言调用Python代码&#xff0c;需要先安…

贝尔曼方程【Bellman Equation】

强化学习笔记 主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程&#xff0c;个人觉得赵老师的课件深入浅出&#xff0c;很适合入门. 第一章 强化学习基本概念 第二章 贝尔曼方程 文章目录 强化学习笔记一、状态值函数贝尔曼方程二、贝尔曼方程的向量形式三、动作值…

鸿蒙开发之导航栏tabs(类似Android tablayout)

当页面信息较多时&#xff0c;为了让用户能够聚焦于当前显示的内容&#xff0c;需要对页面内容进行分类&#xff0c;提高页面空间利用率。Tabs组件可以在一个页面内快速实现视图内容的切换&#xff0c;一方面提升查找信息的效率&#xff0c;另一方面精简用户单次获取到的信息量…

IDEA中使用git

从远程仓库拉取代码 更新代码 提交代码 推送代码到远程仓库 如果代码只是进行了commit&#xff0c;即只提交到了本地仓库而并未推送要进行推送点击push按钮即可&#xff1a; 分支操作 新建分支 切换分支、删除分支、其余分支操作 git面板介绍 reset操作、rebase操作、rev…

【LeetCode: 224. 基本计算器 + 模拟 + 栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

matlab 条件数的倒数

目录 一、概述1、算法概述2、主要函数3、参考文献二、条件设置错误的矩阵的敏感度三、求解单位矩阵的条件四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 1、算法概述

正则表达式具体用法大全

# 正则表达式&#xff1a; ## 单字符匹配&#xff1a; python # 匹配某个字符串&#xff1a; # text "abc" # ret re.match(b,text) # print(ret.group()) # 点&#xff08;.&#xff09;&#xff1a;匹配任意的字符(除了\n)&#xff1a; # text "\nabc&quo…

前言:为什么C语言最适合编程入门?

前言&#xff1a;为什么C语言最适合编程入门&#xff1f; C语言被认为最适合编程入门的原因主要有以下几点&#xff1a; 基础且强大&#xff1a;C语言是一种基础且强大的编程语言。它提供了对底层硬件的直接访问&#xff0c;让初学者能够更好地理解计算机的工作原理&#xff0…

Unity 学习笔记 5.控制飞机飞行

目录 1.摄像机跟随的方法 2.鼠标按键响应 3.键盘按键响应 4.导入素材 5.让飞机向前飞 6.摄像机跟随飞机移动 7.鼠标控制飞机倾斜 8.键盘控制飞机飞行 下载源码 UnityPackage 1.摄像机跟随的方法 2.鼠标按键响应 3.键盘按键响应 4.导入素材 下载素材 步骤&#xff1a; 将…

python的幼儿园管理系统flask-django-php-nodejs

随着信息时代的来临&#xff0c;过去的传统管理方式缺点逐渐暴露&#xff0c;对过去的传统管理方式的缺点进行分析&#xff0c;采取计算机方式构建幼儿园管理系统。本文通过课题背景、课题目的及意义相关技术&#xff0c;提出了一种活动信息、课程信息、菜谱信息、通知公告、家…