Leetcode 刷题记录 02 —— 双指针

本系列为笔者的 Leetcode 刷题记录,顺序为 Hot 100 题官方顺序,根据标签命名,记录笔者总结的做题思路,附部分代码解释和疑问解答。

目录

01 移动零

02 盛最多水的容器

03 三数之和

04 接雨水


01 移动零

//双指针法
class Solution {
public:void moveZeroes(vector<int>& nums) {//左指针指向当前已经处理好的序列的尾部//右指针指向待处理序列的头部int n = nums.size(), left = 0, right = 0;while(right < n){if(nums[right]){swap(nums[left], nums[right]);left++;}right++;}}
};

02 盛最多水的容器

class Solution {
public:int maxArea(vector<int>& height) {int l = 0, r = height.size() - 1;int ans = 0;while(l < r){int area = min(height[l], height[r])*(r - l); //计算当前水量ans = max(ans, area);if(height[l] < height[r]) ++l; //移动挡板else --r;}return ans;}
};

03 三数之和

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {//排序sort(nums.begin(), nums.end());vector<vector<int>> ans;int n = nums.size();for(int first = 0; first < (n - 2); ++first){ //1 first < (n - 2)if(first > 0 && nums[first] == nums[first - 1]) continue;//双指针int third = n - 1;int target = -nums[first];for(int second = (first + 1); second < (n - 1); ++second){ //2 second < (n - 1)if(second > (first + 1) && nums[second] == nums[second - 1]) continue;while(second < third && nums[second] + nums[third] > target) --third;if(second == third) break;if(nums[second] + nums[third] == target){ans.push_back({nums[first], nums[second], nums[third]});}}}return ans;}
};

04 接雨水

class Solution {
public:int trap(vector<int>& height) {}
};

方法一:哈希数组

  • 建立两个哈希数组,leftMax(n)rightMax(n)

  • leftMax[i] 用来存储 i 左边的最大柱子

  • rightMax[i] 用来存储 i 右边的最大柱子

  • i 的储水值为 min(leftMax[i], rightMax[i]) - height[i]

  • 注:if(n == 0) return 0;

class Solution {
public:int trap(vector<int>& height) {int n = height.size();if(n == 0) return 0;vector<int> leftMax(n);leftMax[0] = height[0];for(int i = 1; i <= n-1; ++i){leftMax[i] = max(leftMax[i - 1], height[i]);}vector<int> rightMax(n);rightMax[n - 1] = height[n - 1];for(int i = (n - 2); i >= 0; --i){rightMax[i] = max(rightMax[i + 1], height[i]);}int ans = 0;for(int i = 0; i < n; ++i){ans += min(leftMax[i], rightMax[i]) - height[i];}return ans;}
};

方法二:单调栈

  • 建立一个单调栈 stk,用来存储单调不增长柱子序列

  • 遇到高个柱子,秒掉 top,增加一层雨水

  • 一层雨水体积为 (i - left - 1) * (min(height[left], height[i]) - height[top])

  • 注:if(stk.empty()) break;

class Solution {
public:int trap(vector<int>& height) {stack<int> stk;int n = height.size();int ans = 0;for(int i=0; i<n; ++i){while(!stk.empty() && height[i] > height[stk.top()]){int top = stk.top();stk.pop();if(stk.empty()) break;int left = stk.top();int currWidth = i - left - 1;int currHeight = min(height[left], height[i]) - height[top];ans += currHeight * currWidth;}stk.push(i);}return ans;}
};

方法三:双指针

  • 建立双指针 leftright,用来存储左边最大柱子和右边最大柱子

  • 左边柱子低,则移动 left ,添加一列雨水

  • 右边柱子低,则移动 right ,添加一列雨水

  • 一列雨水体积为 leftMax - height[left]rightMax - height[right]

class Solution {
public:int trap(vector<int>& height) {int n = height.size();int ans = 0;int left = 0, right = n - 1; //双指针int leftMax = 0, rightMax = 0;while(left < right){leftMax = max(leftMax, height[left]);rightMax = max(rightMax, height[right]);if(leftMax < rightMax){ans += leftMax - height[left];++left;}else{ans += rightMax - height[right];--right;}}return ans;}
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/move-zeroes/solutions/489622/yi-dong-ling-by-leetcode-solution/
来源:力扣(LeetCode)

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

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

相关文章

双碳战略下的智慧能源实践:安科瑞储能管理系统助力企业绿色转型

在全球碳中和目标加速推进的背景下&#xff0c;中国“十四五”规划明确提出构建以新能源为主体的新型电力系统&#xff0c;储能技术成为支撑能源结构转型的核心要素。安科瑞储能能量管理系统作为企业级智慧能源解决方案的核心载体&#xff0c;凭借其技术创新与场景适配能力&…

计算机组成与接口14

1.操作系统属于硬件物理机和软件虚拟机的分界层 2.当PE1时表示微处理器进入保护模式&#xff1b;当PE0时表示微处理器进入实地址模式 3.辅助存储器的概念&#xff1a;辅助存储器&#xff0c;也叫外存储器&#xff0c;读取速度最慢&#xff0c;容量最大&#xff0c;价格最低。…

k8s命名空间和资源配额

在现代的云计算环境中&#xff0c;容器化技术已成为主流。而 Kubernetes&#xff08;简称 k8s&#xff09;作为一项开源的容器编排系统&#xff0c;广泛应用于各类场景。本文将详细介绍关于 k8s 中的命名空间和资源配额&#xff0c;帮助你更好地理解和管理你的集群资源。 k8s …

matlab 包围盒中心匹配法实现点云粗配准

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、初始位置2、配准结果本文由CSDN点云侠原创,原文链接,首发于:20255年3月3日。 一、算法原理 1、原理概述 包围盒中心匹配法是将源点云 P P P

Mermaid语法介绍

一、基础语法 图表声明 使用 graph TD&#xff08;自上而下&#xff09;或 graph LR&#xff08;从左到右&#xff09;定义图表方向&#xff0c;节点间用箭头连接。例如&#xff1a; #mermaid-svg-WLayaaK0Ui6cKr5Z {font-family:"trebuchet ms",verdana,arial,sans…

小红书湖仓架构的跃迁之路

作者&#xff1a;李鹏霖(丁典)&#xff0c;小红书-研发工程师&#xff0c;StarRocks Contributor & Apache Impala Committer 本文整理自小红书工程师在 StarRocks 年度峰会上的分享&#xff0c;介绍了小红书自助分析平台中&#xff0c;StarRocks 与 Iceberg 结合后&#x…

Pycharm操作(二)设置字体大小

pycharm默认代码字体很小&#xff0c;看起来不方便&#xff0c;可以在设置里边设置字体大小。 1&#xff09;点击文件下拉菜单&#xff0c;选择设置选项&#xff1b; 2&#xff09;依次点击编辑器、字体&#xff0c;设置文字大小与行高&#xff0c;根据个人习惯进行设置&#…

Github 2025-03-03 开源项目周报Top14

根据Github Trendings的统计,本周(2025-03-03统计)共有14个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目4Jupyter Notebook项目3Go项目2JavaScript项目2C++项目2Vue项目1Rust项目1Dify.AI: 开源的LLM应用程序开发平台 创建…

音视频-WAV格式

1. WAV格式说明&#xff1a; 2. 格式说明&#xff1a; chunkId&#xff1a;通常是 “RIFF” 四个字节&#xff0c;用于标识文件类型。&#xff08;wav文件格式表示&#xff09;chunkSize&#xff1a;表示整个文件除了chunkId和chunkSize这 8 个字节外的其余部分的大小。Forma…

MySQL零基础教程14—子查询

子查询比较简单&#xff0c;我们还是通过案例引入。 有时候我们查询的时候&#xff0c;需要用到的不止一个表的数据&#xff0c;比如下面的场景&#xff1a; 查询名字叫李晓红同学的班主任姓名 我们提供三个表的基础信息如下&#xff1a; 从三张表的结构&#xff0c;我们不难…

爬虫系列之【数据解析之正则】《二》

目录 前言 一、正则基本使用 1.1 导包 1.2 接口方法 1.3 换行匹配问题 二、实战案例 完整代码 前言 在爬虫工作中&#xff0c;我们主要会遇到两种类型的文本数据&#xff1a; JSON格式数据 HTML文档数据 对于JSON字符串数据&#xff0c;通常使用Python的字典操作进行键…

新一代跨境电商ERP系统:从订单到发货的全流程自动化管理

随着全球电商市场的持续扩张&#xff0c;跨境电商卖家面临着多平台运营、国际物流、税务合规等复杂挑战。如何高效整合订单、库存、物流和财务数据&#xff0c;实现从客户下单到商品交付的无缝衔接&#xff0c;成为企业降本增效的关键。Zoho Books作为一款专为跨境商家设计的智…

2.css简介

什么是css&#xff1a; CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档&#xff08;如 HTML 文档或 XML 应用&#xff09;添加样式&#xff08;字体、间距和颜色等&#xff09;的计算机语言&#xff0c;CSS 文件扩展名为 .…

DeepSeek 助力 Vue3 开发:打造丝滑的弹性布局(Flexbox)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

QT实现计算器

1&#xff1a;在注册登录的练习里面&#xff0c; 追加一个QListWidget 项目列表 要求&#xff1a;点击注册之后&#xff0c;将账号显示到 listWidget上面去 以及&#xff0c;在listWidget中双击某个账号的时候&#xff0c;将该账号删除 Widget.h #ifndef WIDGET_H #define…

MAX232数据手册:搭建电平转换桥梁,助力串口稳定通信

在现代电子设备的通信领域&#xff0c;串口通信因其简单可靠而被广泛应用。MAX232 芯片作为串口通信中的关键角色&#xff0c;发挥着不可或缺的作用。下面&#xff0c;我们将依据提供的资料&#xff0c;深入解读 MAX232 芯片的各项特性、参数以及应用要点。 一、引脚说明 MAX2…

el-input实现金额输入

需求&#xff1a;想要实现一个输入金额的el-input&#xff0c;限制只能输入数字和一个小数点。失焦数字转千分位&#xff0c;聚焦转为数字&#xff0c;超过最大值&#xff0c;红字提示 效果图 失焦 聚焦 报错效果 // 组件limitDialog <template><el-dialog:visible.s…

端到端自动驾驶——cnn网络搭建

论文参考&#xff1a;https://arxiv.org/abs/1604.07316 demo 今天主要来看一个如何通过图像直接到控制的自动驾驶端到端的项目&#xff0c;首先需要配置好我的仿真环境&#xff0c;下载软件udacity&#xff1a; https://d17h27t6h515a5.cloudfront.net/topher/2016/November…

自己的网页加一个搜索框,调用deepseek的API

一切源于一个学习黑马程序员视频的突发奇想 在网页悬浮一个搜索按钮&#xff0c;点击可以实现调用deepseek文本模型回答你的问题 前端实现 前端使用vue实现的 首先是整体页面&#xff1a;AIWidget.vue <template><div><!-- 悬浮 AI 按钮 --><el-button c…

第五天 Labview数据记录(5.3 CSV文件读写)

5.3 CSV文件读写 CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔值&#xff09;文件是一种常见的文本文件格式&#xff0c;用于存储表格数据。它在程序中具有重要的作用&#xff0c;主要体现在以下几个方面&#xff1a; 1. 数据存储与交换 &#xff1b;2. 跨平台…