Leetcode刷题——7 滑动窗口 双指针

注:以下代码均为c++

1. 两数之和2(输入有序数组)

在这里插入图片描述
在这里插入图片描述

// 法1:暴力
vector<int> twoSum1(vector<int>& numbers, int target) {vector<int> ans(2);int n = numbers.size();for(int i = 0; i < n-1; i++){if(i != 0 && numbers[i] == numbers[i-1])continue;for(int j = i + 1; j < n; j++){if(numbers[i] + numbers[j] == target){//ans[0] = i + 1, ans[1] = j + 1;//return ans;return {i + 1, j + 1};  //注意:这里可以直接这么写,不需要再建立一个vector返回}}}return {-1, -1};
}

暴力(O(n^2)) =》单调性 =》优化:双指针(O(n))
请添加图片描述

// 法2:双指针
vector<int> twoSum(vector<int>& numbers, int target){int n = numbers.size();for(int i = 0, j = n - 1; i < n-1; i++){while(numbers[i] + numbers[j] > target)j--;if(numbers[i] + numbers[j] == target)return {i + 1, j + 1};}return {-1, -1};
}

2. 合并两个有序数组

在这里插入图片描述
在这里插入图片描述
法1:新建一个数组存nums1,从前往后依次遍历。

void merge1(vector<int>& nums1, int m, vector<int>& nums2, int n) {vector<int> nums11(m);copy(nums1.begin(), nums1.begin() + m,nums11.begin());int i, j, k;for(i = 0, j = 0, k = 0; i < m && j < n; k++){if(nums11[i] <= nums2[j]){nums1[k] = nums11[i];i++;}else{nums1[k] = nums2[j];j++;}}while(i < m){nums1[k] = nums11[i];i++, k++;}while(j < n){nums1[k] = nums2[j];j++, k++;}
}

法2:不需要新建数组,直接在原数组上遍历,从后向前遍历。找到nums1和nums2中的较大数,添加到nums1末尾。
在这里插入图片描述

void merge(vector<int>& nums1, int m, vector<int>& nums2, int n){int i, j, k;for(i = m-1, j = n-1, k = m+n-1; i >= 0 && j >= 0; k--){if(nums1[i] > nums2[j]){nums1[k] = nums1[i];i--;}else{nums1[k] = nums2[j];j--;}}while(j >= 0){nums1[k] = nums2[j];k--, j--;}
}

3. 最小覆盖子串

在这里插入图片描述
在这里插入图片描述
法1:暴力穷举:在s中从头找所有比 t 长的字符串
法2:滑动窗口
请添加图片描述

string minWindow2(string s, string t){unordered_map<char, int> hash;  //每个元素缺多少for(auto c : t)hash[c]++;int cnt = hash.size();  //下面for循环中,c表示已经匹配的哈希表元素个数string res;  //存结果//i为右指针,j为左指针for(int i = 0, j = 0, c = 0; i < s.size(); i++){  //右指针一直向右移动,不回头if(hash[s[i]] == 1)  //找到了s[i]在哈希表内,且该元素正好缺一个:该元素完全匹配c++c++;hash[s[i]]--;//左指针右移while(hash[s[j]] < 0)  //s[j]多了,=0的时候正好hash[s[j++]]++;  //先将缺的hash值+1,再左指针右移if(c == cnt)  //都匹配了if(res.empty() || res.size() > i-j+1)res = s.substr(j, i-j+1);}return res;
}

4. 最长有效括号

在这里插入图片描述
在这里插入图片描述

int work(string s){int res = 0;for(int i = 0, start = 0, cnt = 0; i < s.size(); i++){  //start记录起始位置,i从前往后遍历一遍if(s[i] == '(')cnt++;else{cnt--;if(cnt < 0){start = i + 1;cnt = 0;}else if(cnt == 0)res = max(res, i - start + 1);}}return res;
}
int longestValidParentheses(string s) {int res = work(s);reverse(s.begin(), s.end());for(auto &c: s)  //将'('转换为')',将')'转换为'('c = c ^ 1;  //查ascii码发现'('与')'的二进制只差1,也就是说最后一位一个是0一个是1,所以可以用异或操作来将0变成1,将1变成0,从而实现'('到')'的反转res = max(res, work(s));return res;
}

5. 最小栈

在这里插入图片描述
在这里插入图片描述
本质:求最小前缀。用一个栈保存当前最小值。

class MinStack{
public:stack<int> stk, stk_min;MinStack(){}void push(int val){stk.push(val);if(stk_min.empty())    stk_min.push(val);else stk_min.push(min(val, stk_min.top()));}void pop(){stk.pop();stk_min.pop();}int top(){return stk.top();}int getMin(){return stk_min.top();}
};

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

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

相关文章

递归(四)—— 初识暴力递归之“打印字符串的全排列”

题目1&#xff1a;序列打印一个字符串的全排列 题目分析&#xff1a;结合一实例来理解题目&#xff0c;str “abc”的全排列就是所求得的序列是 strp[0~2]的所有位的排列组合&#xff0c;strNew {“abc”, “acb”, “bac”, “bca”,”cba”,”cab”} 思路1&#xff1a;枚…

旷野之间3 – CTO 应具备的技能

​​​​​​ 随着技术渗透到商业的各个方面,首席技术官的角色变得越来越具有战略性和多面性。虽然深厚的技术技能仍然是基础,但今天的首席技术官还需要具备领导能力、商业敏锐度、沟通能力等优势。 根据我作为 CTO 的个人经验,我将深入探讨现代 CTO 所需的各种能力,包括:…

vue中,图片在div中按照图片原来大小等比例显示

图片在div中按照图片原来大小等比例显示&#xff0c;可以保证web上显示的图片和实际图片形状一样&#xff0c;保留原始图片效果 实现代码如下&#xff1a; <div style"padding: 0; width:400px;height:400px;position: absolute;border: 1px solid #eff2f6;">…

百问网全志D1h开发板红外控制LVGL界面切换

红外控制LVGL界面切换 1. 测试红外功能 1.1 配置设备树 查看原理图&#xff1a; 可以看到红外对应的引脚号是PG16。 进入目录&#xff1a; cd /home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4修改board.dts&#xff1a; vim board.dts修改引…

MUNIK解读ISO26262:安全计划

前言 当我们进行功能安全开发时&#xff0c;由于整个项目周期和内容较多&#xff0c;因此需要在项目前期对一些问题提前进行规划&#xff1a;比如功能安全开发具体分为几个阶段&#xff0c;应该怎么去做&#xff1f;对于不同的环节&#xff0c;有哪些人员来执行&#xff1f;资…

在网上申请流量卡审核失败,可能是你的年龄有问题!

在网上申请流量卡审核失败&#xff0c;可能是你的年龄有问题&#xff01; 先上个图&#xff1a; ​ 网上的流量卡并不是随意申请的&#xff0c;而是填写申请信息后由运营商进行审核&#xff0c;审核通过后才会发卡&#xff0c;如果你提交的订单没有审核通过&#xff0c;那么大…

体积大的快递怎么寄便宜?如何寄件寄包裹更省钱?

大学毕业了&#xff0c;面对即将到来的工作生活&#xff0c;小李不得不把宿舍里的大包小包打包寄回家。可是&#xff0c;当他真正开始打包行李时&#xff0c;才发现这可不是一件简单的事&#xff1a;衣服、被子、书籍、杂物……这些东西加起来体积不小&#xff0c;想要省钱寄快…

HippoRAG如何从大脑获取线索以改进LLM检索

知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步&#xff0c;但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG&#xff0c;这是一种创新性的检索框架&#xff0c;其设计理念源于人类…

强化学习实战1:OpenAI Gym 实验环境介绍

环境配置 我的 torch 版本是 2.3.0&#xff0c;然后 gym 版本是 0.22.0&#xff0c;python 版本是 3.8 &#xff0c;pygame 版本是 2.6.0 。 首先安装一下 gym&#xff1a; pip install gym0.22.0 -i https://pypi.tuna.tsinghua.edu.cn/simple然后安装一下 pygame&#xff…

Linux服务器CPU占用率达到100%排查思路

1、找到最耗CPU的进程pid&#xff0c;执行命令 top 2、找到最耗CPU的线程tid // 执行 top -Hp [pid] 定位应用进程对应的线程 tid // 按shift p 组合键&#xff0c;按照CPU占用率排序 > top -Hp 14246 3、将线程pid转化为16进制 // printf "%x\n" [tid] 将tid…

Sharding-JDBC分库分表之SpringBoot主从配置

Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 前言 在开发中&#xff0c;如果对数据库的读和写都在一个数据服务器中操作&#xff0c;面对日益增加的访问量&#x…

无法找到模块“@wangeditor/editor-for-vue”的声明文件

vue3项目中使用wangeditor/editor遇到的问题 开发环境不管红线报错正常使用 打包的时候就会报错了 1.安装依赖 pnpm install --save wangeditor/editor wangeditor/editor-for-vuenext 2.遇到的问题 3.解决方法 在src目录下面创建 wangeditor-types.d.ts 文件 代码如下 de…

【ai_agent】从零写一个agent框架(五)基于egui制作一个agent/workflow在线编辑器

前言 上篇我们实现了基础节点&#xff0c;并暴露出grpc服务&#xff0c;但是手动编辑文本制作一个workflow实在强人所难。 所以本文我们做个webui自动生成workflow。 开搞之前先看看别人怎么做的。 Dify 的ui 效果如下图示&#xff1a; 支持多种功能节点 但只能打开一个节…

【线性表,线性表中的顺序表和链表】

目录 1、线性表的定义和基本操作1.1、线性表的定义1.2、线性表的基本操作 2、顺序表和链表的比较2.1、顺序表2.1.1、顺序表的定义和特点2.1.2、顺序表的实现&#xff08;1&#xff09;顺序表的静态分配&#xff1a;&#xff08;2&#xff09;顺序表的动态分配 2.1.3、顺序表的基…

基于正点原子的FreeRTOS笔记——队列

一、什么是队列 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制。 在队列中可以存储数量有限、大小固定的数据。队列中的每一个数据叫做“队列项目”&#xff0c;队列能够存储“队列项目”的最大数量称为队列的长度。 在创建队列时要指定队列长度以及队列项目…

蹭一个围棋亚军!不要和低维的人说话——早读(逆天打工人爬取热门微信文章解读)

熬夜后需要补什么呢&#xff1f; 引言Python 代码第一篇 洞见 不要和低维的人说话&#xff08;深度好文&#xff09;第二篇 冲冲冲结尾 引言 昨晚真的是熬夜又想不出东西 真的头大 最近下围棋 这个棋感很好呀 我是K级选手 目前是8级 套几个buff 纯自学 为什么决定学围棋呢? 是…

翰德恩咨询赋能材料行业上市公司,共筑IPD管理体系新篇章

赋能背景概览 坐落于江苏的某材料行业领军企业&#xff0c;作为国内无机陶瓷膜元件及成套设备领域的佼佼者&#xff0c;以其庞大的生产规模、丰富的产品系列及卓越的研发实力&#xff0c;屹立行业之巅二十余年。公司不仅在新材料研发、技术创新、工艺设计、设备制造及整体解决…

swift与Internvl下的多模态大模型分布式微调指南(附代码和数据)

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 基于Dify的智能分类方案&#xff1a;大模型结合KNN算法&#xff08;附代码&#xff…

InavFlight飞控固件学习-1《开发环境搭建》

目录 文章目录 目录摘要1.官网2.形成Linux开发环境工具2.1 简介2.2 相关工具2.2.1 Ubuntu / Debian系统配置命令2.2.2 Fedora系统配置命令2.2.3 Fedora系统配置命令 2.3 克隆存储库2.4 构建工具2.5 使用cmake2.6 构建固件2.7 清除2.8 cmake 缓存维护2.9 编译通过ninja2.10 更新…