力扣爆刷第100天之hot100五连刷86-90

力扣爆刷第100天之hot100五连刷86-90

文章目录

      • 力扣爆刷第100天之hot100五连刷86-90
      • 一、139. 单词拆分
      • 二、300. 最长递增子序列
      • 三、152. 乘积最大子数组
      • 四、416. 分割等和子集
      • 五、32. 最长有效括号

一、139. 单词拆分

题目链接:https://leetcode.cn/problems/word-break/description/?envType=study-plan-v2&envId=top-100-liked
思路:定义dp[i]表示字符串s[0, i]可以被拼接出,那么如果要推导出当前s[0,i]可以被拼出,只需要,s[0, i-word.length]可以被拼出,且s[i-word.length] == w,即可推出,此即为递推公式。

class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dp = new boolean[s.length() + 1];dp[0] = true;for(int i = 1; i < dp.length; i++) {for(String word : wordDict) {if(i < word.length() || dp[i] || !dp[i-word.length()]) continue;dp[i] = isTrue(s, word, i);}}return dp[s.length()];}boolean isTrue(String s, String word, int index) {int i = index - word.length(), j = 0;while(i < index) {if(s.charAt(i) != word.charAt(j)) return false;i++;j++;}return true;}
}

二、300. 最长递增子序列

题目链接:https://leetcode.cn/problems/longest-increasing-subsequence/description/?envType=study-plan-v2&envId=top-100-liked
思路:定义dp[i]表示区间[0, i]以nums[i]为结尾的最长递增子序列的长度,那么如果nums[i] > nums[j],故 dp[i] = Math.max(dp[i], dp[j]+1);

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

三、152. 乘积最大子数组

题目链接:https://leetcode.cn/problems/maximum-product-subarray/description/?envType=study-plan-v2&envId=top-100-liked
思路:求最长乘积子数组,由于元素有负数存在,我们求每一个位置的最大值,该最大值的并不一定依赖的是前一个位置的最大值,也可能是前一个位置的最小值,所以要用两个数组记录分表记录最大和最小值,在求最大值的时候,dp[i] = max(前一个位置的最大值 * 当前元素 , 当前元素, 前一个位置的最小值 * 当前元素)。每一个dp[i]由三种装填推出。

class Solution {public int maxProduct(int[] nums) {int[] dpMax = new int[nums.length];int[] dpMin = new int[nums.length];dpMax[0] = nums[0];dpMin[0] = nums[0];int max = nums[0];for(int i = 1; i < nums.length; i++) {dpMax[i] = Math.max(dpMax[i-1] * nums[i], Math.max(nums[i], dpMin[i-1] * nums[i]));dpMin[i] = Math.min(dpMin[i-1] * nums[i], Math.min(nums[i], dpMax[i-1] * nums[i]));            }for(int i = 1; i < nums.length; i++) {max = Math.max(max, dpMax[i]);}return max;}
}

四、416. 分割等和子集

题目链接:https://leetcode.cn/problems/partition-equal-subset-sum/description/?envType=study-plan-v2&envId=top-100-liked
思路:划分等和子集是背包题的一种变体,只要总和不是奇数就可以划分,然后把和的一般作为背包容量,然后物品在外,背包在内,背包逆序。

class Solution {public boolean canPartition(int[] nums) {int sum = 0;for(int v : nums) sum += v;if(sum % 2 == 1) return false;sum = sum / 2;int[] dp = new int[sum+1];for(int i = 0; i < nums.length; i++) {for(int j = sum; j >= nums[i]; j--) {dp[j] = Math.max(dp[j], dp[j-nums[i]] + nums[i]);}}return dp[sum] == sum;}
}

五、32. 最长有效括号

题目链接:https://leetcode.cn/problems/longest-valid-parentheses/description/?envType=study-plan-v2&envId=top-100-liked
思路:使用动态规划做时间超了,可以使用栈做。

class Solution {public int longestValidParentheses(String s) {if(s.length() == 0) return 0;int[] dp = new int[s.length()];int max = 0;for(int i = 1; i < s.length(); i++) {for(int j = 0; j < i; j++) {if(isTrue(s, j, i)) {dp[i] = i-j+1;break;}}max = Math.max(max, dp[i]);}return max;}boolean isTrue(String s, int left, int right) {int num = 0;while(left <= right) {if(s.charAt(left++) == '(') {num++;}else{num--;}if(num < 0) return false;}return num == 0;}
}

使用栈:

class Solution {public int longestValidParentheses(String s) {int maxans = 0;int[] dp = new int[s.length()];for (int i = 1; i < s.length(); i++) {if (s.charAt(i) == ')') {if (s.charAt(i - 1) == '(') {dp[i] = (i >= 2 ? dp[i - 2] : 0) + 2;} else if (i - dp[i - 1] > 0 && s.charAt(i - dp[i - 1] - 1) == '(') {dp[i] = dp[i - 1] + ((i - dp[i - 1]) >= 2 ? dp[i - dp[i - 1] - 2] : 0) + 2;}maxans = Math.max(maxans, dp[i]);}}return maxans;}
}

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

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

相关文章

<DFS剪枝>数字王国之军训排队

DFS剪枝 其实就是将搜索过程一些不必要的部分直接剔除掉。 剪枝是回溯法的一种重要优化手段&#xff0c;往往需要先写一个暴力搜索&#xff0c;然后找到某些特殊的数学关系&#xff0c;或者逻辑关系&#xff0c;通过它们的约束让搜索树尽可能浅而小&#xff0c;从而达到降低时间…

MAC地址(静态、黑洞、优先级)

拓扑图 配置 1&#xff09;静态MAC地址配置 mac-address learning disable命令用来关闭MAC地址学习功能。 关闭MAC地址学习功能后&#xff0c;设备将不会再从该接口学习新的MAC地址。关闭MAC地址学习后可配置的动作有discard和forward。 关闭MAC地址学习功能的缺省动作为fo…

NSS [SWPUCTF 2022 新生赛]ez_ez_unserialize

NSS [SWPUCTF 2022 新生赛]ez_ez_unserialize 开题&#xff0c;直接给了题目源码。 简单看了一下&#xff0c;题目告诉我们flag在哪&#xff0c;而且类中有高亮文件方法。怎么拿flag已经很明显了。关键点在于__weakup()魔术方法固定死了我们高亮的文件。所以这题只需要绕过__w…

Linux作业

1.创建用户&#xff0c;用户名为user&#xff0c;user02密码均为123.com&#xff0c;创建完成后用tail查看用户是否存在。&#xff08;截图&#xff09;&#xff08;10分&#xff09; 2.在用户user主目录中用mkdir命令创建目录my.txt,在目录my.txt中创建文件a1.txt、1a1.txt、5…

【故障排查】10分钟解决Quartz重复调度的疑难杂症

我司使用Apache DolphinScheduler作为调度框架很久了&#xff0c;感兴趣的小伙伴可以看看这些干货文章&#xff1a; 因为之前监控到会出现重复的调度的问题&#xff0c;所以此文记录排查重复调度问题的全过程&#xff0c;希望对社区其他的小伙伴能够起到抛砖引玉的作用&#x…

dji psdk开发(10)航线任务简介、KMZ文件的解析

航线任务到目前主要使用waypoint v2 和 waypoint v3三个版本。 Waypoint v2.0:只支持 Matrice 300 RTK 和 Matrice 350 RTK。waypoint v3.0:支持 Matrice 30 Series、Mavic 3 Enterprise Series 和 Matrice 3D/3TD 机型,不支持 Matrice 300 RTK 和 Matrice 350 RTK。这里先简…

轻松爬取跨境电商商品数据采集|电商数据API采集接口

跨境电商商品数据集爬取方案 在之前写过一篇关于网页爬取的文章&#xff0c;使用的是亮数据这个工具&#xff0c;并且带领大家进行了注册&#xff0c;介绍了一些相关的功能。现在我们来探索一下如何爬取某大型电商商品数据集 很多电商科技公司以技术驱动的公司&#xff0c;致力…

【学习】python函数语法(面像对象、封装函数)

阅读开源深度学习源码的时候&#xff0c;使用到了很多封装函数以及Python的高级语法&#xff0c;看起来很混乱很痛苦很困难。对python函数语法做个总结&#xff01;&#xff01;&#xff01; Table of Contents 熟练Python语法&#xff0c;尤其是函数参数、迭代器与生成器、函…

使用Redis做缓存的小案例

如果不了解Redis&#xff0c;可以查看本人博客&#xff1a;Redis入门 Redis基于内存&#xff0c;因此查询速度快&#xff0c;常常可以用来作为缓存使用&#xff0c;缓存就是我们在内存中开辟一段区域来存储我们查询比较频繁的数据&#xff0c;这样&#xff0c;我们在下一次查询…

C#,图论与图算法,有向图(Directed Graph)的环(Cycle)的普通判断算法与源代码

1 检查该图是否包含循环 给定一个有向图,检查该图是否包含循环。如果给定的图形至少包含一个循环,则函数应返回true,否则返回false。 方法:深度优先遍历可用于检测图中的循环。连接图的DFS生成树。只有当图中存在后缘时,图中才存在循环。后边是从节点到自身(自循环)或…

[视觉基础知识]: img to bev # include bev seg

参考&#xff1a;https://towardsdatascience.com/monocular-birds-eye-view-semantic-segmentation-for-autonomous-driving-ee2f771afb59 有源传感器&#xff08;lidar or radar&#xff09;得到的数据&#xff0c;天然就是一种bev表示&#xff08;x-y平面&#xff09;&#…

kafka connect

kafka connect是kafka和外部存储系统交互的工具 bootstrap.servers key.converter&#xff1a;JSON and Avro. value.converter&#xff1a;JSON and Avro. 一、standalone模式 1、在config/connect-standalone.properties中配置 plugin.pathlibs/connect-file-3.6.1.jar 2、在…

如何进行Android的SDK开发

进行Android的SDK开发&#xff0c;需要以下步骤&#xff1a; 安装Android开发工具包&#xff08;Android SDK&#xff09; 首先&#xff0c;需要安装Android开发工具包&#xff08;Android SDK&#xff09;。可以从Google官方网站下载并安装Android Studio&#xff0c;它将包含…

想速成AD?凡亿教育正式上线《Altium Designer 24:150讲操作速成实战课程》

随着电子技术的不断发展,芯片生产工艺迭代更新,印制电路板(PCB)结构日益复杂,从最早的单片机到双面板,再到复杂的多层板结构,电路板上的布线密度越来越高。 同时,随着DSP、ARM、FPGA、DDR等高速逻辑元件的应用,PCB的信号完整性和抗干扰性能显得尤为重要,光靠EDA软件的自动布线…

LeetCode每日一题 翻转二叉树(二叉树)

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,1]示…

每天几道面试题|Kafka(一)基础概念

文章目录 什么是 Apache Kafka&#xff1f;它是用来解决什么问题的&#xff1f;Kafka 的主要组件有哪些&#xff1f;它们各自的作用是什么&#xff1f;Kafka 中的生产者和消费者是什么&#xff1f;它们之间的关系是怎样的&#xff1f;Kafka 中的分区是什么&#xff1f;为什么要…

Mistral AI vs. Meta:两大 Top 开源模型的对比

编者按&#xff1a; 随着大模型的不断升级和参数量的持续扩大&#xff0c;越来越多人开始重视大模型存在的硬件资源要求高、碳排放量较大等问题。如何在保持模型性能的同时&#xff0c;降低计算成本和资源消耗&#xff0c;成为了业界一个迫切需要解决的问题。 我们今天为大家带…

Servlet使用

文章目录 简介一、快速入门二、Servlet 执行流程三、Servlet 生命周期四、Servlet 方法介绍五、Servlet 体系结构六、Servlet urlPattern配置七、XML 配置方式编写 Servlet 简介 一、快速入门 <dependencies><dependency><groupId>javax.servlet</groupId…

个人网站制作 Part 9 添加发布、管理博客功能 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加博客功能&#x1f528;使用Express和MongoDB&#x1f527;步骤 1: 创建博客模型&#x1f527;步骤 2: 创建博客路由 &#x1f528;使用前端框架&#x1f527;步骤 3:…

界面开发框架DevExpress XAF v24.1新版预告 - 跨平台应用UI(三)

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 本文中的内容概述了…