Leedcode刷题——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/3225343.html

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

相关文章

【C++报错已解决】Invalid Conversion from ‘const char*’ to ‘char*’

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言 ❓ 一、问题描述 &#x1f469;‍&#x1f52c;1.1 报错示例 &#x1f3c6;1.2 报错分析 &#x1f4da;1.3 解决…

英福康INFICON FabGuard传感器集成与分析系统PPT

英福康INFICON FabGuard传感器集成与分析系统PPT

移动互联安全

什么是移动互联 从狭义的角度来说&#xff0c;移动互联网是一个以宽带IP为技术核心&#xff0c;可同时提供语音、传真、图像、多媒体等高品质电信服务的新一代开放的电信基础网络。 从广义的角度来说&#xff0c;移动互联网是指将互联网提供的技术、平台、应用以及商业模式&…

045基于SSM+Jsp的固定资产管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

Claude artifacts的平替:deepseek和豆包Marscode的web预览

Claude Artifacts 是由 Anthropic 开发的先进 AI 模型 Claude 3 生成的输出。这些 Artifacts 可以是文本、图像、数据可视化&#xff0c;甚至是更复杂的输出&#xff0c;如交互式内容和自动化报告。此外&#xff0c;Artifacts 还可以是预构建的资源或模板&#xff0c;旨在简化各…

深度学习组件优化器简介--AI(七)

深度学习网络组件介绍 网络组件优化器优化器--SGD优化器--Adam 网络组件 前文介绍的组件如下&#xff1a; 优化器 释义&#xff1a; 损失函数计算出预测值与真实值之间的差距时&#xff0c;有优化器根据一定的策略去调整原有模型的权重&#xff0c;这个调整的策略可以理解成…

安装python2

参考&#xff1a; https://www.cnblogs.com/linjiangplus/p/13948593.html https://www.python.org/downloads/release/python-2718/

【系统架构设计师】九、软件工程(面向对象方法|逆向工程)

目录 六、面向对象方法 6.1 基本概念 6.2 面向对象的分析 6.2.1 用例关系 6.2.2 类之间的关系 6.3 面向对象的设计 6.4 面向对象设计原则与设计模式 6.5 面向对象软件的测试 七、逆向工程 历年真题练习 六、面向对象方法 面向对象的分析方法 (Object-Oriented Analys…

Blackbox AI : 全新的人工智能编码助手 您的高效AI开发全能助手

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 提起AI 智能编码助手&#xff0c;相信到了如今大家都不陌生。其对我们开发的代码时的效率有显著的提升&#xff0c;可以说…

BouncyCastleProvider 对 X.509 证书的生成

文章目录 前言BouncyCastleProvider 对 X.509 证书的生成1. demo 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xf…

基于Java中的SSM框架实现水稻朔源信息系统项目【项目源码】

基于Java中的SSM框架实现水稻朔源信息系统演示 SSM框架 SSM框架是基于Spring、SpringMVC以及Mybatis实现的针对JAVA WEB端应用的开发框架&#xff0c;通过SSM框架结构可以实现以上三种框架的优点集合&#xff0c;从而实现更加高效便捷的系统开发和呈现。该框架结构通过Spring框…

路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于蚁群算法的三维无人机航迹规划&#xff08;Matlab&#xff09;。 蚁群算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时…

面向对象特征

面向对象三大特征&#xff1a;封装、继承、多态。 方法 假设有两个方法&#xff0c;一个方法的接收者&#xff0c;是指针类型&#xff0c;一个方法的接收者是值类型&#xff0c; 那么&#xff1a; 对于值传递的变量和指针类型的变量&#xff0c;这两个方法的区别 如果这两个…

文本引导I2I迈向统一!北大王选所提出FCDiffusion:端到端适用于各种图像转换任务

文章链接&#xff1a;https://arxiv.org/pdf/2407.03006 github地址&#xff1a;https://github.com/XiangGao1102/FCDiffusion 最近&#xff0c;大规模的文本到图像(T2I)扩散模型在图像到图像(I2I)转换中展现出强大的能力&#xff0c;允许通过用户提供的文本提示进行开放域的图…

Kithara和OpenCV (一)

Kithara使用 OpenCV 目录 Kithara使用 OpenCV简介需求和支持的环境构建 OpenCV 库使用 CMake 进行配置以与 Kithara 一起工作 使用 OpenCV 库设置项目运行 OpenCV 代码图像采集和 OpenCV自动并行化限制和局限性1.系统建议2.实时限制3.不支持的功能和缺失的功能4.显示 OpenCV 对…

设计模式之Facade设计模式

Facade设计模式&#xff0c;也称为外观模式&#xff0c;是一种结构型设计模式&#xff0c;它主要用于为子系统中的一组接口提供一个统一的高层接口&#xff0c;从而使得子系统更加容易使用。以下是关于Facade设计模式的详细介绍&#xff1a; 一、定义 Facade模式为多个复杂的…

XTuner 微调 LLM:1.8B, 部署

扫码立刻参与白嫖A100&#xff0c;书生大模型微调部署学习活动。亲测有效 内容来源&#xff1a;Tutorial/xtuner/personal_assistant_document.md at camp2 InternLM/Tutorial GitHubLLM Tutorial. Contribute to InternLM/Tutorial development by creating an account on G…

Mattermost:一个强大的开源协作平台

Mattermost是一个强大的开源协作平台&#xff0c;基于云原生架构&#xff0c;为企业级用户提供安全、可扩展且自托管的消息传递解决方案。 一、平台特点 开源与定制性&#xff1a;Mattermost是一个开源项目&#xff0c;用户可以根据自身需求定制界面、添加功能或扩展其功能&am…

深入探索大语言模型

深入探索大语言模型 引言 大语言模型&#xff08;LLM&#xff09;是现代人工智能领域中最为重要的突破之一。这些模型在自然语言处理&#xff08;NLP&#xff09;任务中展示了惊人的能力&#xff0c;从文本生成到问答系统&#xff0c;无所不包。本文将从多个角度全面介绍大语…

文字识别 -- eSearch v1.12.1

软件简介 eSearch是一款功能强大的跨平台软件工具&#xff0c;主要功能包括截屏、OCR文字识别、搜索、翻译、贴图、以图搜图以及录屏等。它不仅支持多屏幕、窗口和控件选择、长截屏等高级截屏功能&#xff0c;还支持离线和在线OCR服务&#xff0c;可进行自定义OCR模型和字典设…