LeetCode Hot100 11~20

目录

  • 子串
    • 11. 滑动窗口最大值
    • 12. 最小覆盖子串
  • 数组
    • 13. 最大子数组和
    • 14. 合并区间
    • 15. 翻转数组
    • 16. 除数字自身以外的乘积
    • 17. 缺失的第一个正数
  • 矩阵
    • 18. 矩阵置零
    • 19. 螺旋矩阵
    • 20 旋转图像90度

子串

11. 滑动窗口最大值

本题使用deque来维护一个单调队列 注意删除元素和添加元素的时机即可

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> ans;deque<int> dq;// 我们首先将前面K个数字加进去for (int i = 0; i < k; i++) {    while(!dq.empty() && nums[i] > dq.back()) {dq.pop_back();}dq.push_back(nums[i]);}ans.push_back(dq.front());for (int i = k; i < nums.size(); i++) {if (nums[i - k] == dq.front()) {dq.pop_front();}while(!dq.empty() && nums[i] > dq.back()) {dq.pop_back();}dq.push_back(nums[i]);ans.push_back(dq.front());}return ans;}
};

12. 最小覆盖子串

类似滑动窗口问题 再加上一个欠账表就可以解决 类似前面的最小子数组问题

public:string minWindow(string s, string t) {unordered_map<char , int> unmapBill;for (auto ch : t) {unmapBill[ch]++;}int lnBill = t.size();int L = 0;int R = 0;int minL = 0;int minR = 0;int minWin = INT_MAX;while (R < s.size()) {if (unmapBill.count(s[R])) {if (unmapBill[s[R]] > 0) {lnBill--;}unmapBill[s[R]]--;}while(lnBill == 0) {if ((R - L) < minWin) {minL = L;minR = R;minWin = R - L;}if (unmapBill.count(s[L])) {unmapBill[s[L]]++;if (unmapBill[s[L]] > 0) {lnBill++;}}L++;}R++;}if(minWin == INT_MAX) {return "";}string ans = s.substr(minL , minWin + 1);return ans;}
};

数组

13. 最大子数组和

很简单的动态规划

class Solution {
public:int maxSubArray(vector<int>& nums) {vector<int> dp(nums.size() , 0);dp[0] = nums[0];for (int i = 1; i < nums.size(); i++) {if (dp[i-1] < 0) {dp[i] = nums[i];}else {dp[i] = dp[i-1] + nums[i];}}int lnmax = dp[0];for (auto x : dp) {if (x > lnmax) {lnmax = x;}}return lnmax;}
};

14. 合并区间

很简单的贪心问题 需要注意的是

  1. 我们如果要降序排序 第一个元素要小于第二个元素
  2. 合并区间的时候要注意右边界
            bool compare(vector<int>& v1 , vector<int>& v2) {if (v1[0] != v2[0]) {return v1[0] < v2[0];}else {return v1[0] < v2[0];}}
class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if (intervals.size() == 1) {return intervals;}vector<vector<int>> ans;sort(intervals.begin() , intervals.end() , compare);ans.push_back(intervals[0]);for (int i = 1; i < intervals.size(); i++) {if (intervals[i][0] <= ans.back()[1]) {int R = max(intervals[i][1] , ans.back()[1]);ans.back()[1] = R;}else {ans.push_back(intervals[i]);}}return ans;}
};

15. 翻转数组

很简单的一个脑筋急转弯 需要注意 beigin() 到 end() 是左闭右开

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());  // 翻转剩余元素}
};

16. 除数字自身以外的乘积

这道题属于是知道了前后缀积就简单 前后缀积相乘就能得到答案

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

17. 缺失的第一个正数

如果能用哈希表就用哈希表

不能的话就在原数组上交换

需要注意三点

  1. 交换的条件
  2. 避免重复 进入死循环
  3. 最后ans = I + 1;
class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n = nums.size();for (int i = 0; i < nums.size(); i++) {while(nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {swap(nums[i] , nums[nums[i] - 1]);}}int ans = n + 1;for (int i = 0; i < nums.size(); i++) {if (nums[i] != i + 1) {ans = i + 1;break;}}return ans;}
};

矩阵

18. 矩阵置零

使用第一行第一列来进行标记

在更新的时候要从第一行 第一列开始 避免破坏我们之前记录的值

class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {// 行列记录 行标列标int m = matrix.size(); int n = matrix[0].size();bool cow = false;bool rol = false;for (int i = 0 ; i < m ; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == 0) {if (i == 0) {cow = true;}if (j == 0) {rol = true;}matrix[i][0] = 0;matrix[0][j] = 0;}}}for (int i = 1; i < m; i++) {for (int j = 1 ; j < n; j++) {if (matrix[0][j] == 0 || matrix[i][0] == 0) {matrix[i][j] = 0;}}}for (int i = 0; i < m; i++) {if (rol) {matrix[i][0] = 0;}}for (int j = 0; j < n; j++) {if (cow) {matrix[0][j] = 0;}}}
};

19. 螺旋矩阵

只需要设置四个变量 然后四个方向依次遍历即可

#include <vector>
using namespace std;class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;int m = matrix.size();       // 行数int n = matrix[0].size();    // 列数int left = 0, right = n - 1, top = 0, bottom = m - 1;while (left <= right && top <= bottom) {// 从左到右for (int i = left; i <= right; i++) {ans.push_back(matrix[top][i]);}top++;// 从上到下for (int i = top; i <= bottom; i++) {ans.push_back(matrix[i][right]);}right--;// 从右到左if (top <= bottom) {for (int i = right; i >= left; i--) {ans.push_back(matrix[bottom][i]);}}bottom--;//从下到上if (left <= right) {for (int i = bottom; i >= top; i--) {ans.push_back(matrix[i][left]);}}left++;}return ans;}
};

20 旋转图像90度

记住公式 先上下翻转 再对角线翻转

上下翻转的时候注意 小于 N/2

class Solution {
public:void rotate(vector<vector<int>>& matrix) {int n = matrix.size() ;// 上下翻转for (int i = 0; i < n / 2; i++) {swap(matrix[i] , matrix[n - i - 1]);}// 对角线反转for (int i = 0; i < matrix.size(); i++) {for (int j = i; j < matrix[0].size(); j++) {swap(matrix[i][j] , matrix[j][i]);}}}
};

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

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

相关文章

网站访问统计A/B测试与数据分析

在网站运营中&#xff0c;访问统计和数据分析是优化用户体验和提高转化率的关键工具。A/B测试作为一种数据驱动的方法&#xff0c;能够帮助网站运营者验证设计和内容的有效性。A/B测试的基本原理是同时展示两个不同的版本&#xff08;A和B&#xff09;&#xff0c;通过比较它们…

Spring MVC:深入理解与应用实践

前言 Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller&#xff08;MVC&#xff09;实现。它通过分离业务逻辑、数据、显示来组织代码&#xff0c;使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个…

C学习:移位幻影之左移一个负数,会发生什么?

C学习&#xff1a;移位幻影之左移一个负数&#xff0c;会发生什么&#xff1f; 问题背景无符号数移位问题有符号数移位操作使低位置零问题 问题背景 C语言中&#xff0c;移位是个简单的问题&#xff0c;但又是个高风险的问题。 简单在于&#xff0c;大部分场景都可以理解为乘或…

芯驰X9SP与汽车麦克风-打造无缝驾驶体验

当今汽车技术的进步不仅提升了驾驶体验&#xff0c;还改变了我们与车辆互动的方式。汽车麦克风作为车内语音控制系统的重要组成部分&#xff0c;正逐渐成为现代汽车的标配。 技术原理 汽车麦克风主要依赖于声音传感技术&#xff0c;通常包括电容式麦克风和动圈式麦克风。这些…

tomcat的Mysql链接字符串问题

tomcat配置mysql链接需要改server.xml或content.xml。 但是server.xml或content.xml中mysql的配置看起来很古怪: url"jdbc:mysql://10.21.0.6:3306/hrdatabase?characterEncodinggbk&amp;autoReconnecttrue" 而使用springboot开发java应用&#xff0c;使用ya…

界面控件Syncfusion Essential Studio®现在已完全支持 .NET 9

Syncfusion Essential Studio现在完全支持 .NET 9&#xff0c;可最新版本2024 Volume 3 版本中使用&#xff01;通过此更新&#xff0c;Blazor、.NET MAUI、WPF、WinForms、WinUI和ASP.NET Core 平台中的 Syncfusion 组件以及文档处理库已准备好让您利用 .NET 9 中的最新功能。…

剑指offer(专项突破)---字符串

总目录&#xff1a;剑指offer&#xff08;专项突破&#xff09;---目录-CSDN博客 1.字符串的基本知识 C语言中&#xff1a; 函数名功能描述strcpy(s1, s2)将字符串s2复制到字符串s1中&#xff0c;包括结束符\0&#xff0c;要求s1有足够空间容纳s2的内容。strncpy(s1, s2, n)…

ORB-SLAM2源码学习:MapPoint.cc:MapPoint::UpdateNormalAndDepth()计算平均观测方向以及观测距离范围1

前言 这个函数是属于地图点属性的一部分。 1.函数声明 void MapPoint::UpdateNormalAndDepth() {.... } 2.函数定义 1.获取观测到该地图点的所有关键帧的信息 map<KeyFrame*,size_t> observations;KeyFrame* pRefKF;cv::Mat Pos;{unique_lock<mutex> lock1(…

【JVM什么时候触发YoungGC和FullGC】

YoungGC 年轻代Eden区满&#xff0c;就会触发YoungGC FullGC 老年代空间不足 经过多次GC后的大年龄对象会被放进老年代&#xff0c;或创建的大对象会直接在老年代分配&#xff0c;此时若老年代空间不足&#xff0c;就会触发FullGC。空间分配担保失败 触发YoungGC的时候会进行…

用“*”构成一个倒三角形:JAVA

输入&#xff1a;5 输出&#xff1a; ******* ***** *** * 代码&#xff1a; import java.util.Scanner; //倒三角 public class FF6 {public static void main(String[] args) {Scanner scannernew Scanner(System.in);while (scanner.hasNextInt()){int nscanner…

充分统计量(Sufficient Statistic)概念与应用: 中英双语

充分统计量&#xff1a;概念与应用 在统计学中&#xff0c;充分统计量&#xff08;Sufficient Statistic&#xff09; 是一个核心概念。它是从样本中计算得出的函数&#xff0c;能够完整且无损地表征样本中与分布参数相关的信息。在参数估计中&#xff0c;充分统计量能够帮助我…

ubuntu环境下安装electron环境,并快速打包

1.配置镜像源 关闭防火墙&#xff0c;命令&#xff1a;sudo ufw disable 1.1配置国内镜像源&#xff1a; vim /etc/apt/source.list deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb-src https://mirrors.aliyun.com/ubuntu/ jammy main…

【eclipse】快捷键

【eclipse】快捷键 编辑导航重构调试复制其他快速生成 Eclipse 提供了丰富的快捷键来帮助开发者提高工作效率。 以下是一些常用的 Eclipse 快捷键&#xff0c;它们覆盖了编辑、导航、重构、调试等多个方面。 这些快捷键能够显著提升开发效率&#xff0c;尤其是在处理大型项目时…

yarn : 无法加载文件 E:\node\node_global\yarn.ps1,因为在此系统上禁止运行脚本

先确保安装了yarn —— npm install -g yarn 终端输入set-ExecutionPolicy RemoteSigned 若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本&#xff0c;请使用以下命令将计算机上的执行策略更改为RemoteSigned 再去使用yarn okk~

python学opencv|读取视频(二)制作gif

【1】引言 前述已经完成了图像和视频的读取学习&#xff0c;本次课学习制作gif格式动图。 【2】教程 实际上想制作gif格式动图是一个顺理成章的操作&#xff0c;完成了图像和视频的处理&#xff0c;那就自然而然会对gif的处理也产生兴趣。 不过在opencv官网、matplotlib官网…

高校心理教育辅导|基于springBoot的高校心理教育辅导系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 随着Internet技术的发展&#xff0c;心理教育辅导系统应运而生&…

dreamerv3复现教程

dreamerv3复现教程 &#xff11;、dreamerv3基础安装&#xff12;、gym0.19.0安装3、JDK8安装&#xff14;、mineRL&#xff10;.4.4安装&#xff15;、diamond_env安装 由于dreamerv3存在很多版本冲突问题&#xff0c;所以很难直接使用和复现 &#xff11;、dreamerv3基础安装…

Mock 对象 详解

Mock 对象详解 Mock 对象 是软件测试中常用的技术&#xff0c;用于模拟实际对象的行为&#xff0c;以便隔离待测试的代码&#xff0c;与其他依赖解耦&#xff0c;进行单元测试。通过 Mock 对象&#xff0c;我们可以控制依赖对象的行为&#xff0c;使得测试更专注于被测单元的功…

如何参加华为欧拉考试?

华为欧拉考试主要针对的是华为欧拉&#xff08;EulerOS/openEuler&#xff09;操作系统的认证考试&#xff0c;这一认证体系旨在培养和认证具备基于欧拉操作系统进行企业级应用运行基础环境搭建、管理和调测能力的工程师以及云计算架构师。以下是对华为欧拉考试的详细介绍&…

网络安全、Web安全、渗透测试之笔经面经总结(一)

本篇文章总结涉及以下几个方面&#xff1a; 一&#xff1a;对称加密非对称加密&#xff1f; 对称加密&#xff1a;加解密用同一密钥&#xff0c;密钥维护复杂n&#xff08;n-1&#xff09;/2&#xff0c;不适合互联网传输密钥&#xff0c;加解密效率高。应用于加密数据。 非…