2024.06.18 刷题日记

76. 最小覆盖子串

这道题目的思路是利用哈希表来存储字符串的字符出现的频率,然后利用滑动窗口来确定是否包含目标串,如果没有包含,就继续滑动右指针。当子串已经包含的时候,就收缩窗口,更新答案,以及右移 left。

class Solution {
public:string minWindow(string s, string t) {// 滑动窗口int left = 0, right = 0;unordered_map<char, int> s_map, t_map;char temp, c;for (int ch : t) {t_map[ch]++;}int reque = t_map.size();int formed = 0;vector<int> ans = {0, 0, -1}; // left,right,lenwhile (right < s.size()) {temp = s[right];s_map[temp]++;// 拓展右指针if (t_map.find(temp) != t_map.end() && s_map[temp] == t_map[temp]) {formed++;}// 左指针收缩while (left <= right && formed == reque) {c = s[left];// 更新答案if (ans[2] == -1 || ans[2] > right - left + 1) {ans[0] = left;ans[1] = right;ans[2] = right - left + 1;}// 缩小s_map[c]--;if (t_map.find(c) != t_map.end() && s_map[c] < t_map[c]) {formed--;}left++;}right++;}return ans[2] == -1 ? "" : s.substr(ans[0], ans[2]);}
};

53. 最大子数组和

动态规划,确定状态:current_sum 为 当前 num[i] 为结尾最大和子串;状态转移方程:current_sum = max(nums[i], current_sum + nums[i]),因此代码不难写出:

class Solution {
public:int maxSubArray(vector<int>& nums) {int current_sum = nums[0]; // 初始化为第一个元素int max_sum = nums[0];     // 初始化为第一个元素for (int i = 1; i < nums.size(); i++) {current_sum = max(nums[i], current_sum + nums[i]);max_sum = max(max_sum, current_sum);}return max_sum;}
};

56. 合并区间

思路是首先排序,然后进行合并。合并时满足:merged.back()[1] >= interval[0];否则,直接存储:

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if (intervals.empty())return {};// 对区间进行排序,根据每个区间的起始位置sort(intervals.begin(), intervals.end(),[](const vector<int>& a, const vector<int>& b) {return a[0] < b[0];});vector<vector<int>> merged;for (auto& interval : intervals) {// 如果merged为空或者当前区间不与merged中的最后一个区间重叠if (merged.empty() || merged.back()[1] < interval[0]) {merged.push_back(interval);} else {// 否则,有重叠,进行合并merged.back()[1] = max(merged.back()[1], interval[1]);}}return merged;}
};

189. 轮转数组

三次翻转就可以:

class Solution {
public:void rotate(vector<int>& nums, int k) {int n = nums.size();k = k % n; // 处理 k 大于数组长度的情况reverse(nums.begin(), nums.end()); // 反转整个数组reverse(nums.begin(), nums.begin() + k); // 反转前 k 个元素reverse(nums.begin() + k, nums.end()); // 反转剩下的元素}
};

238. 除自身以外数组的乘积

这里使用到了前缀积,然后前缀积乘以后缀积,就得到了当前下标的解:

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> ans(n, 1);// 前缀积int preMul = 1;for (int i = 0; i < n; i++) {ans[i] = preMul;preMul *= nums[i];}// 后缀积int postMul = 1;for (int i = n - 1; i >= 0; i--) {ans[i] *= postMul;postMul *= nums[i];}return ans;}
};

总结(gpt4)

1. 最小覆盖子串(滑动窗口和哈希表)

这个问题通过滑动窗口和哈希表来解决。利用两个哈希表分别记录目标字符串 t 和当前窗口中的字符出现频率。通过扩展右边界来包含更多字符,一旦包含了所有目标字符,就尝试从左边界收缩窗口以寻找最小覆盖子串。这种方法有效地平衡了窗口的大小和包含目标字符串所需的所有字符。

2. 最大子数组和(动态规划)

这个问题使用了动态规划来解决。状态定义非常直观:current_sum 为以当前元素结尾的最大子数组和。通过状态转移方程 current_sum = max(nums[i], current_sum + nums[i]) 来更新当前状态,同时维护一个全局的最大和 max_sum

3. 合并区间(排序和贪心算法)

首先对区间按起始位置进行排序,然后依次遍历排序后的区间,根据当前区间的起始位置与已合并区间的结束位置的关系来决定是否需要合并。这种方法依赖于贪心策略,通过局部最优选择(合并重叠区间)来达到全局最优(合并所有重古区间)。

4. 轮转数组(数组翻转)

这个解法巧妙地使用了三次翻转来实现数组的旋转。首先翻转整个数组,然后翻转前 k 个元素,最后翻转剩余的元素。这种方法在技术上是直接且高效的,避免了复杂的数组操作。

5. 除自身以外数组的乘积(前缀和后缀积)

通过两次遍历数组,先计算前缀积,再计算后缀积,并将二者相乘得到最终结果。这种方法避免了使用除法,同时解决了包含零的情况。通过前缀和后缀积的结合,能够高效地计算出每个位置上的目标值。

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

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

相关文章

2024年6月记录

1.C/C中typedef的用法大全_C 语言_脚本之家

C#数电票查验的简便方式

数电票&#xff0c;全称全面数字化的电子发票&#xff0c;也被称为数电发票或全电发票。它是与纸质发票具有同等法律效力的全新发票形式&#xff0c;不再以纸质形式存在&#xff0c;而是完全数字化&#xff0c;无需介质支撑&#xff0c;也不需要预先申请领用。现如今&#xff0…

MyBatisPlus可以自动把我们的业务对应的动态代理接口注入到父类baseMapper属性中,因此我们可以省略对应的mapper动态代理接口

MyBatisPlus可以自动把我们的业务对应的动态代理接口注入到父类baseMapper属性中&#xff0c;因此我们可以省略对应的mapper动态代理接口 在service服务实现类中&#xff0c;当我们使用MyBatis框架的时候&#xff0c;那么一般会有一个类似于下面的动态地理接口的显示引入&…

【Java】已解决java.lang.UnsupportedOperationException异常

文章目录 问题背景可能出错的原因错误代码示例正确代码示例注意事项 已解决java.lang.UnsupportedOperationException异常 在Java编程中&#xff0c;java.lang.UnsupportedOperationException是一个运行时异常&#xff0c;通常表示尝试执行一个不支持的操作。这种异常经常发生…

【附带源码】机械臂MoveIt2极简教程(五)、第二个demo - rviz可视化

系列文章目录 【附带源码】机械臂MoveIt2极简教程&#xff08;一&#xff09;、moveit2安装 【附带源码】机械臂MoveIt2极简教程&#xff08;二&#xff09;、move_group交互 【附带源码】机械臂MoveIt2极简教程&#xff08;三&#xff09;、URDF/SRDF介绍 【附带源码】机械臂…

Java中和的区别

在Java中&#xff0c;& 和 && 都是逻辑运算符&#xff0c;但它们之间存在一些重要的区别&#xff0c;特别是在它们如何评估其操作数以及它们的性能影响方面。 短路评估&#xff08;Short-Circuit Evaluation&#xff09;&#xff1a; &&&#xff08;逻辑…

免费分享:2014-2021年OSM中国POI数据(附下载方法)

OpenStreetMap&#xff08;OSM&#xff09;是一个全球性的开源协作地图项目&#xff0c;允许任何人编辑和分享地理信息&#xff0c;旨在创建自由、准确且可广泛使用的世界地图。POI是“Point of Interest”的缩写&#xff0c;意为“兴趣点”。 OSM POI矢量数据是OpenStreetMap项…

超神级!Markdown最详细教程,程序员的福音

超神级&#xff01;Markdown最详细教程&#xff0c;程序员的福音Markdown最详细教程&#xff0c;关于Markdown的语法和使用就先讲到这里&#xff0c;如果喜欢&#xff0c;请关注“IT技术馆”。馆长会更新​最实用的技术&#xff01;https://mp.weixin.qq.com/s/fNzhLFyYRd3skG-…

Hash路由、History路由原理及优缺点

Hash路由 原理&#xff1a; 主要基于浏览器提供的window.location.hash属性。 初始化时: 浏览器地址栏中的URL会包含一个"#"符号及其后面的部分,称为"hash"。 前端程序会监听window.onhashchange事件,在hash发生变化时触发回调函数。路由切换时: 当用户…

为什么人们对即将推出的 Go 1.23 迭代器感到愤怒

原文&#xff1a;gingerBill - 2024.06.17 TL;DR 它让 Go 变得太“函数式”&#xff0c;而不再是不折不扣的命令式语言。 最近&#xff0c;我在 Twitter 上看到一篇帖子&#xff0c;展示了 Go 1.23&#xff08;2024 年 8 月&#xff09;即将推出的 Go 迭代器设计。据我所知&a…

golang windows打包为linux可执行文件

使用go的交叉编译功能 set GOOSlinux set GOARCHamd64然后再执行go build 可能会报异常, 所以贴出我的go env配置仅供参考 go env环境配置 D:\GoWork\src\go-tzv>go env set GO111MODULEauto set GOARCHamd64 set GOBIN …

寄存器和存储器的区别与联系

在计算机系统中&#xff0c;寄存器和存储器是两个重要的概念&#xff0c;它们在数据存储和处理过程中扮演着不同但互补的角色。本文将详细讨论寄存器和存储器的区别与联系。 1. 基本概念 **寄存器&#xff08;Register&#xff09;**是一种速度极快的小容量存储单元&#xff…

Maven 插件列表详解

Maven 是一个强大的项目管理和构建工具&#xff0c;广泛应用于 Java 项目中。作为一款优秀的构建管理工具&#xff0c;Maven 不仅提供了标准化的项目结构和依赖管理&#xff0c;还通过其丰富的插件系统&#xff0c;极大地扩展了其功能和灵活性。无论是代码编译、测试、打包&…

2024级中国社科院中外合作办学双证博士和英国斯特灵的管理学博士

2024级中国社科院中外合作办学双证博士和英国斯特灵的管理学博士 中国社科院-英国斯特灵大学合办的创新与领导力博士项目&#xff08;DOCTOR OF MANAGEMENT 简称“DMAN”&#xff09;是中国社会科学院大学&#xff08;中国社会科学院研究生院&#xff09;第一个博士层次的中外…

Win 10/Win 11 共享/远程访问的后续设置以及如何查看电脑的账户密码

共享设置 如何给文件设置共享这里不谈&#xff0c;右键属性添加共享&#xff0c;类似的教程也有很多&#xff08;如果这步都搞不定建议就不要折腾了&#xff0c;老老实实的用U盘吧&#xff09; 如果不出意外的话&#xff0c;你在网络界面是看不到共享pc和文件的 这时候需要两…

【VS2022 编译UE5.1 错误 C4834 】

这里写自定义目录标题 错误 错误 使用VS2022编译UE5.1源码&#xff0c;错误 C4834 放弃具有 [[nodiscard]] 属性的函数的返回值 F:\UE\Engine\Plugins\Runtime\Steam\SteamVR\Source\SteamVRInputDevice\Private\SteamVRInputDeviceFunctionLibrary.cpp(513): error C4834: d…

python jieba中文文本切割成句子

# -*- coding: utf-8 -*- # Time : 2024/6/18 10:26 # Author : Cocktail_py import jieba.posseg as psegdef cut_sentences(text):"""中文句子分割"""# 使用jieba的分句模块sentences pseg.cut(text)result []tmp []for word, flag in …

要颜值有颜值,有性价比有性价比,华硕天选键、鼠组合分享

作为ROG产品的忠实粉丝&#xff0c;用过不少ROG 相关的产品&#xff0c;近期华硕天选TX98和天选MINI 鼠标的发布&#xff0c;独特配色令我眼前一亮。 华硕天选TX98键盘&#xff0c;作为新品&#xff0c;从看上的第一眼就觉得这款键盘是非常值得推荐。 它完美地诠释了潮玩新次元…

亲测:无影云电脑免费三个月已经缩短为1个月

亲测&#xff1a;无影云电脑免费三个月已经缩短为1个月&#xff0c;大家不要再找3个月的无影云电脑&#xff0c;已经没有了&#xff0c;目前最新消息是1个月。以前可以领3个月&#xff0c;现在只能领1个月&#xff0c;在阿里云免费中心 https://free.aliyun.com/ 大家自己看吧&…

光伏电站管理app,一站式管理,一体化接单

早在1839年&#xff0c;法国科学家贝壳雷尔就发现了“光伏效应”&#xff0c;随后诞生了“光学发电”技术。随着现代化与工业化的不断发展、进步&#xff0c;出于资源再生与保护环境的需要&#xff0c;人们越来越重视光伏发电技术&#xff0c;也越来越追求光伏电站的智能化管理…