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

力扣爆刷第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.mzph.cn/bicheng/44154.shtml

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

相关文章

mysql判断时间段是否重合

mysql判断时间段是否重合 SELECT CASE WHEN t1.start_time < t2.end_time AND t1.end_time > t2.start_time THEN ‘重合’ ELSE ‘不重合’ END AS result FROM table_name t1, table_name t2 WHERE t1.id <> t2.id;

14-26 剑和侠客 – 预训练模型三部曲3 – 机器人时代来临

概述 在第 1 部分和第 2 部分中&#xff0c;我们讨论了适用于文本和图像任务的预训练模型&#xff0c;并探索了当今常用的模型。我们分析了这些模型的架构以及如何将它们用于特定任务。实现 AGI 所需的两个主要支柱是语言理解和机器的视觉能力。有许多任务与这两种能力有关。 …

中职网络安全B模块渗透测试system0016

访问http://靶机IP/web1/,获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b; 可能会跳转8000端口删除进入80端口 进入后点击侦查一下&#xff0c;这里乱码了&#xff0c;我们点击查看是一个柯南&#xff0c;web但这是一个web题目肯定不是隐写术&#xff0c;所以说题目的…

跨境支付新篇章:引领电商潮流

在东南亚电商经济蓬勃发展的背景下&#xff0c;跨境电商成为了许多企业拓展市场的重要途径。然而&#xff0c;当外国电商企业想要进入中国市场时&#xff0c;他们面临着一系列挑战。这些挑战不仅考验着企业的技术能力&#xff0c;更考验着它们的战略布局和市场适应性。 东南亚…

Eureka应用场景和优势

Eureka是一款由Netflix开源的服务注册与发现框架&#xff0c;在微服务架构中扮演着至关重要的角色。以下是Eureka的应用场景和优势&#xff1a; Eureka的应用场景 Eureka主要应用于微服务架构中&#xff0c;特别是在大型、复杂的分布式系统中&#xff0c;用于管理和发现服务。…

CDF累积分布函数和PPF百分点位分布函数

目录 cdf累积分布函数 (CDF) ppf百分位点函数 (PPF) 区别与联系示例关系和区别 cdf 累积分布函数 (CDF) 定义&#xff1a; 累积分布函数 F ( x ) F(x) F(x) 给出随机变量 X X X 小于或等于某个值 x x x 的概率。数学定义&#xff1a; F ( x ) P ( X ≤ x ) F(x) P(X \l…

等保测评视角下的哈尔滨智慧城市安全框架构建

随着智慧城市的兴起&#xff0c;哈尔滨作为东北地区的重要城市&#xff0c;正在积极探索和实践智慧城市安全框架的构建&#xff0c;以确保在数字化转型的过程中&#xff0c;既能享受科技带来的便利&#xff0c;又能有效防范和应对各类网络安全风险。 本文将从等保测评的视角出…

163邮件通知提醒功能怎么开?有哪些优势?

163邮件通知提醒如何定制&#xff1f;设置邮件通知提醒的步骤&#xff1f; 163邮箱作为一款常用的电子邮件服务工具&#xff0c;其邮件通知提醒功能能有效帮助用户及时处理重要邮件&#xff0c;提高工作效率。AokSend将详细介绍如何在163邮箱中开启邮件通知提醒功能&#xff0…

查看归档日志切换频率

1.查看归档日志切换频率 SET LINE 300 PAGES 9999 COL "00" FOR A3 COL "01" FOR A3 COL "02" FOR A3 COL "03" FOR A3 COL "04" FOR A3 COL "05" FOR A3 COL "06" FOR A3 COL "07" FOR A3 …

科普文:从Redis1.0到Redis7.0的发展历程来理解为什么Redis钟爱单线程

概叙 Redis 作为一款流行的开源数据库&#xff0c;每个版本都在不断的迭代和升级&#xff0c;新增了丰富的特性和功能&#xff0c;解决了更多实际应用场景中的问题&#xff0c;提高了 Redis 的性能和可靠性。 总体来说&#xff0c;Redis 的演化之路可以分为以下几个阶段&#x…

【D3.js in Action 3 精译】D3 入门基础之 Node、JavaScript 框架与 Observable 记事本

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架 ✔️1.2.7 Observable 记事…

全网最简单的Java设计模式【六】Java单例模式 懒汉式详解

Java单例模式 懒汉式详解 【创作】 不易&#xff0c;【点赞】 是情义&#xff0c;【关注】 是动力&#xff0c;【收藏】 是回忆。 示例代码地址&#xff1a;https://gitee.com/code-in-java/csdn-blog.git 一、概念与原理 Java中的单例模式是一种确保一个类只有一个实例&#…

人形机器人头部结构设计

我又回来啦&#xff01;电机部分的教程会继续更新咯~ 前几天做了成图增材赛道&#xff0c;也算4个月以来本人做过最复杂的结构项目。 不知结果会怎么样&#xff0c;但我也尽全力啦&#xff01; 把说明书发在这里&#xff0c;STL已发GitHub&#xff0c;链接&#xff1a; zysampo…

使用公网服务器作为跳板的SSH隧道:常见应用场景

文章目录 使用公网服务器作为跳板的SSH隧道:常见应用场景什么是SSH隧道?使用公网服务器作为跳板的优势常见应用场景1. 远程桌面访问2. 访问内网服务3. 安全文件传输如何设置SSH隧道总结使用公网服务器作为跳板的SSH隧道:常见应用场景 在现代网络环境中,SSH(Secure Shell)…

如何视频提取字幕?推荐5款视频字幕提取软件

#7月份我的同事一个个消失了#&#xff0c;这不仅是一个话题标签&#xff0c;更是许多公司面临的现实写照。 在人手紧缺的夏日&#xff0c;如何提高工作效率成为当务之急。特别是对于需要处理视频内容的团队&#xff0c;一款能够快速提取字幕的软件显得尤为重要。 下面&#x…

揭秘小红书矩阵系统:源码助力一键自动发布,多平台管理,效率飙升!

在数字化时代&#xff0c;社交媒体已成为品牌和个人展示自我、推广产品的重要舞台。小红书&#xff0c;作为备受年轻人喜爱的社交平台&#xff0c;其影响力不容小觑。然而&#xff0c;面对日益激烈的竞争&#xff0c;如何高效地在小红书上发布内容、管理多平台账号&#xff0c;…

纯技术分享:淘宝商品详情原数据接口参数解析

item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_s…

【JavaEE】Spring AOP详解

一.AOP的定义. Aspect Oriented Programming&#xff08;面向切面编程&#xff09;概括的来说AOP是一种思想, 是对某一类事情的集中处理 什么是面向切面编程呢? 切面就是指某一类特定问题, 所以AOP也可以理解为面向特定方法编程.什么是面向特定方法编程呢? 比如上个博客文章…

百度搜索框制作HTML+CSS

样品图 自制效果图&#xff08;附注释&#xff09; <!DOCTYPE html> <html lang"en"><head><!-- 定义文档的字符编码为UTF-8&#xff0c;以支持中文等多语言字符 --><meta charset"UTF-8" /><!-- 设置页面在不同设备上的…

掌握Perl命令行:深入解析命令行参数的艺术

&#x1f680; 掌握Perl命令行&#xff1a;深入解析命令行参数的艺术 在Perl编程中&#xff0c;命令行参数是与外部交互的重要方式之一。无论是执行脚本时的选项设置&#xff0c;还是传递必要的运行时数据&#xff0c;命令行参数都扮演着至关重要的角色。本文将带您深入了解如…