力扣爆刷第162天之TOP100五连刷76-80(最小路径和、最长公共前缀、最长连续序列)

news2024/9/28 13:17:44

力扣爆刷第162天之TOP100五连刷76-80(最小路径和、最长公共前缀、最长连续序列)

文章目录

      • 力扣爆刷第162天之TOP100五连刷76-80(最小路径和、最长公共前缀、最长连续序列)
      • 一、64. 最小路径和
      • 二、221. 最大正方形
      • 三、162. 寻找峰值
      • 四、14. 最长公共前缀
      • 五、128. 最长连续序列

一、64. 最小路径和

题目链接:https://leetcode.cn/problems/minimum-path-sum/description/
思路:每次只能向下或向右移动一步,求最小路径和,很经典的一道动态规划题,定义dp[i][j]表示,抵达nums[i][j]时的最小路径和,那么根据定义,要想抵达nums[i][j]这个位置,就得从nums[i-1][j]或者nums[i][j-1]的位置出发,而这两个位置对应的最小路径和即为dp[i-1][j]或者dp[i][j-1],故而dp[i][j] = min(dp[i-1][j], dp[i][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);
        dp[1] = 0;
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                dp[j+1] = Math.min(dp[j], dp[j+1]) + grid[i][j];
            }
        }
        return dp[n];
    }
}

二、221. 最大正方形

题目链接:https://leetcode.cn/problems/maximal-square/description/
思路:矩阵内包含0或者1,求全为1的最大正方形,其实可以把题目理解为不为零的正方形的边长的计算,定义dp[i][j]表示以nums[i][j]为右下角的不为0的正方形的最大边长。那么根据定义可以得到推导关系,如果nums[i][j]不为0,那么以他为右下角的不为0的最长正方形边长,应该依赖于该位置的左方、上方、左上方的最小边长+1,。如这3个位置记录的边长为1,1,0,那么此处为0+1,如果是1,1,1,那么此处为1+1。如果为1,2,1,那么此处为1+1.
故而,dp[i][j] = Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1])) + 1;
在这里插入图片描述

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

三、162. 寻找峰值

题目链接:https://leetcode.cn/problems/find-peak-element/description/
思路:让在数组中寻找峰值,所谓峰值即1,2,1其中2就是峰值,本身来说好找,遍历一遍即可,但是题目要求在O(logn)的时间复杂度完成,那么一般只要是要求logn,那么基本上就得是划分区间二分之类的,才能达到,心里要有这个意识。
既然知道了需要划分区间,那么区间该如何划分呢?其实很简单就是二分划分,二分查找,中间值如果满足峰值条件就直接返回,如果不满足就再次划分区间去各自的区间内进行重复的寻找即可。

class Solution {
    int index = -1;
    public int findPeakElement(int[] nums) {
        if(nums.length == 1) return 0;
        findMax(nums, 0, nums.length-1);
        return index;
    }
    
    void findMax(int[] nums, int left, int right) {
        if(left > right || index != -1) return;
        int mid = left + (right - left) / 2;
        if(mid == 0) {
            if(nums[mid] > nums[mid+1]) {
                index = mid;
                return;
            }
        }else if(mid == nums.length-1) {
            if(nums[mid] > nums[mid-1]) {
                index = mid;
                return;
            }
        }else if(nums[mid] > nums[mid-1] && nums[mid] > nums[mid+1]) {
            index = mid;
            return;
        }
        findMax(nums, left, mid-1);
        findMax(nums, mid+1, right);
    }
}

四、14. 最长公共前缀

题目链接:https://leetcode.cn/problems/longest-common-prefix/description/
思路:求最长公共前缀,这个直接遍历就可以,用第一个字符串中的每一个字符去遍历剩下每一个字符串中的字符,只要出现长度超界或者不等,就算抵达终点位置了,直接返回即可。

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length == 1) return strs[0];
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < strs[0].length(); i++) {
            for(int j = 1; j < strs.length; j++) {
                if(i >= strs[j].length() || strs[0].charAt(i) != strs[j].charAt(i)) return sb.toString();
            }
            sb.append(strs[0].charAt(i));
        }
        return sb.toString();
    }
}


五、128. 最长连续序列

题目链接:https://leetcode.cn/problems/longest-consecutive-sequence/description/
思路:有一个无序序列,求其中的元素能够排列组合成的最长连续序列,也就是如4,5,3,2,1,最长为1,2,3,4,5最长连续长度为5。
这种无序的请求可以考虑使用set添加元素,都添加之后遍历set,如果当前元素-1不存在于set之中,说明这个元素可能是一个连续序列的开头,所以就从此处开始,不断的+1,然后判断是否在set中,这样就可以求出最长连续序列。

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for(int i : nums) set.add(i);
        int max = 0;
        for(int i : set) {
            if(!set.contains(i-1)) {
                int t = 0;
                while(set.contains(i)) {
                    i++;
                    t++;
                }
                max = Math.max(max, t);
            }
        }
        return max;
    }
}

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

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

相关文章

UML图书管理系统用例图示例

新书速览|《UML 2.5基础、建模与设计实践》新书速览|《UML 2.5基础、建模与设计实践 【例4.4】图书管理系统用例图。 图书管理系统按其业务功能分成借阅者管理、图书管理、借书、还书和用户管理等几部分&#xff0c;这些职能对应于系统的不同组织部门。 1&#xff09;系统参…

密态计算,大模型“用数”的必由之路

文&#xff5c;白 鸽 编&#xff5c;王一粟 今年世界人工智能大会上&#xff0c;大模型如何走向深度应用成为重要议题。 但在大模型迈向深度应用的过程中&#xff0c;相比于算力的稀缺&#xff0c;“真正的问题是缺数据&#xff0c;无论是在通用技术领域&#xff0c;还是在专…

基于stm32单片机的智能手环的设计

摘 要 随着科技的飞速发展和人们生活水平的提高&#xff0c;健康与科技日益融合&#xff0c;智能可穿戴设备已成为现代人生活中不可或缺的一部分。智能手环&#xff0c;作为一种便携、实用且功能丰富的可穿戴设备&#xff0c;受到越来越多用户的喜爱。它不仅能够实时监测用户的…

鸿蒙开发:每天一个小bug----鸿蒙开发路由跳转踩坑

一、前言 报错内容显示找不到页面 &#xff0c;肯定我们页面没写对呗&#xff01; 可能是这几个原因:1.main_pages.json没配置路由 {"src": ["pages/02/UserInfoClass","pages/02/AppStorageCase02"] } 2.跳转路径没写对 错误&#xff1a;…

如何管理一百个ai专家智能体——ai调度系统设计

前言 如果你用过openai的chatgpt服务&#xff0c;你肯定知道一个叫做GPTs的智能体商店&#xff0c;里面提供了大量的来自官方和个人制作的专门针对某个领域的gpt助手。比如&#xff0c;你想让gpt帮忙写文章&#xff0c;并且要能够写得好&#xff0c;你就可以在商店中搜索相关的…

JS代码动态打印404页面源码

JS代码动态打印404页面源码&#xff0c;适合做网站错误页&#xff0c;具有js动态打印效果&#xff0c;喜欢的朋友可以拿去 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务…

跌200万后女子要卖掉能看西湖的房子周边有完善配套

今年楼市行情不太好,很多业主都是想要将手中多余的房子出售,因为不想亏 钱了。比如这个业主陈艳也是一样的,日前其决定要将国都公寓的房子出售,然而 根据陈艳描述,这套房子最大的亮点,就是在家就可以欣赏到西湖一隅的美景。 陈艳解释,十多年前买入时,为了居住更舒适,便将…

【Linux】进程7——查看进程

1.为什么进程管理这么重要呢&#xff1f; 这是因为&#xff1a; 首先&#xff0c;我们在操作系统时的各项任务其实都是经过某个PID来完成的&#xff08;包括你的bash环境&#xff09;&#xff0c;因此&#xff0c;能不能执行某项任务&#xff0c;就与该进程的权限有关了。再来…

LLM大模型应用中的安全对齐的简单理解

LLM大模型应用中的安全对齐的简单理解 随着人工智能技术的不断发展&#xff0c;大规模语言模型&#xff08;如GPT-4&#xff09;的应用越来越广泛。为了保证这些大模型在实际应用中的性能和安全性&#xff0c;安全对齐&#xff08;Safe Alignment&#xff09;成为一个重要的概…

PostgreSQL 中如何实现数据的增量更新和全量更新的平衡?

文章目录 一、增量更新与全量更新的概念增量更新全量更新 二、考虑的因素1. 数据量2. 数据更改的频率和规模3. 数据一致性要求4. 系统性能和资源利用5. 业务逻辑和流程 三、解决方案&#xff08;一&#xff09;混合使用增量更新和全量更新&#xff08;二&#xff09;使用临时表…

基于 Springboot 红酒庄内部信息管理系统 设计实现

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统流程 &#x1f4da; 系统架构设计 &#x1f4da; 数据库设计 6.1数据三范式&#xff1a; &#x1f4da; 系统功能的具体实现 &#x1f4ac; 系统登录和首页 系统登录 首页 &#x1f4ac; 用户功能模块 添…

Backend - C# 操作PostgreSQL DB

目录 一、安装 Npgsql 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、操作类 &#xff08;一&#xff09;操作类 1.NpgsqlConnection类 &#xff08;1&#xff09;作用 &#xff08;2&#xff09;引入 &a…

3Ds MAX 2025:创意的翅膀

初识3Ds MAX 2025 在我初次接触3Ds MAX 2025时&#xff0c;仿佛打开了一扇通往无限可能的大门。那时&#xff0c;我还是一个对三维建模充满好奇的初学者&#xff0c;心中怀揣着对未来的憧憬和对艺术的热爱。3Ds MAX 2025的出现&#xff0c;如同一位温柔的导师&#xff0c;带领…

全面解析BPMN、CMMN、DMN与XML

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 全面解析BPMN、CMMN、DMN与XML 前言BPMN&#xff08;业务流程模型与标记法&#xff09;定义与用途…

【昇思25天学习打卡营打卡指南-第二十二天】GAN图像生成

GAN图像生成 模型简介 生成式对抗网络(Generative Adversarial Networks&#xff0c;GAN)是一种生成式机器学习模型&#xff0c;是近年来复杂分布上无监督学习最具前景的方法之一。 最初&#xff0c;GAN由Ian J. Goodfellow于2014年发明&#xff0c;并在论文Generative Adve…

国产口碑最好的骨传导耳机有哪些?优选五大高口碑机型推荐!

作为一名有着多年工作经验的数码测评师&#xff0c;可以说对骨传导耳机或者蓝牙耳机等数码产品有着深入的了解&#xff0c;近期&#xff0c;有很多粉丝&#xff0c;或者身边的朋友经常向我咨询关于骨传导耳机的问题。确实如此&#xff0c;优质的骨传导耳机能在保护听力、保持环…

AI知识库:以AI之力,引领企业知识管理新纪元

在当今这个信息爆炸的时代&#xff0c;企业面临着前所未有的知识管理挑战。随着数据量的激增&#xff0c;如何高效地整理、存储并快速检索海量信息&#xff0c;成为了每个企业亟需解决的核心问题。 在过去&#xff0c;企业的知识库常常被视为一种必要的负担。它们充满了冗长复…

侯捷C++面向对象高级编程(下)-2-non-explicit one argument constructor

1.构造函数 构造函数: Fraction(int num, int den 1) 初始化分子和分母&#xff0c;允许指定分子 num 和可选的分母 den。默认情况下&#xff0c;分母为 1。 加法运算符重载: Fraction operator(const Fraction& f) 重载了加法运算符 。这使得两个 Fraction 对象可以通过 …

【蓄势·致远】 同为科技(TOWE)2024年年中会议

2024年7月2日-8日&#xff0c;同为科技&#xff08;TOWE&#xff09;召开2024年年中工作会议。会议回顾上半年总体工作情况&#xff0c;分析研判发展形势&#xff0c;规划部署下半年工作。 为期一周的工作会议&#xff0c;由同为科技&#xff08;TOWE&#xff09;创始人、董事长…

vue 画二维码及长按保存

需求 想要做如下图的二维码带文字&#xff0c;且能够长按保存 前期准备 一个canvas安装qrcode&#xff08;命令&#xff1a;npm i qrcode&#xff09; 画二维码及文字 初始化画布 <template><div><canvas ref"canvas" width"300" he…