当前位置: 首页 > news >正文

力扣hot100——双指针

283. 移动零

class Solution {
public:void moveZeroes(vector<int>& nums) {for (int i = 0, j = 0; j < nums.size() || i < nums.size(); j++) {if (j >= nums.size()) {nums[i++] = 0;continue;}if (nums[j]) nums[i++] = nums[j];}}
};

 双指针,一个指针指向要修改的位置,另一个指针遍历数组

11. 盛最多水的容器

class Solution {
public:int maxArea(vector<int>& a) {int l = 0, r = a.size() - 1;int ans = 0;while (l < r) {ans = max(ans, (r - l) * min(a[l], a[r]));if (a[l] < a[r]) l++;else r--;}return ans;}
};

15. 三数之和

class Solution {
public:struct node {int x, y, z;bool operator<(const node& t) const {if (x != t.x)return x < t.x;if (y != t.y)return y < t.y;if (z != t.z)return z < t.z;return false;}};vector<vector<int>> threeSum(vector<int>& a) {sort(a.begin(), a.end());int n = a.size();set<node> s;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {int t = a[i] + a[j];t *= -1;int l = i + 1, r = j - 1;while (l < r) {int mid = (l + r + 1) / 2;if (a[mid] <= t) l = mid;else r = mid - 1;}if (l > i && l < j && a[l] == t)s.insert({a[i], a[l], a[j]});}}vector<vector<int>> ans;for (auto [x, y, z]: s) {ans.push_back({x, y, z});}return ans;}
};

哈希,模拟

42. 接雨水

class Solution {
public:int trap(vector<int>& height) {vector<int> a;a.push_back(0);int n = height.size();vector<int> l(n + 10, 0);vector<int> r(n + 10, 0);for (auto x : height)a.push_back(x);int ans = 0;for (int i = 1; i <= n; i++) {l[i] = r[i] = a[i];}stack<int> stk;for (int i = 1; i <= n; i++) {while (stk.size() && a[i] > a[stk.top()])stk.pop();if (stk.size()) {l[i] = l[stk.top()];}stk.push(i);}while (stk.size())stk.pop();for (int i = n; i >= 1; i--) {while (stk.size() && a[i] > a[stk.top()])stk.pop();if (stk.size()) {r[i] = r[stk.top()];}stk.push(i);}for (int i = 1; i <= n; i++) {int t = min(l[i], r[i]);if (t > a[i]) ans += t - a[i];}// return l[6];return ans;}
};

单调栈,找每根柱子左边第一个比他大的,右边第一个比他大的,那么这根柱子的贡献就是二者的最小值-它自己

http://www.lryc.cn/news/506513.html

相关文章:

  • 【代码随想录day58】【C++复健】 117. 软件构建(拓扑排序);47. 参加科学大会(dijkstra(朴素版)精讲)
  • 【NLP 16、实践 ③ 找出特定字符在字符串中的位置】
  • 费解的开关(bfs + 哈希表 or 递推)
  • C语言——实现求出最大值
  • 基于微信小程序的短视频系统(SpringBoot)+文档
  • Flutter 中 Sliver 的各种装饰器介绍与使用
  • 电感的基本概念
  • linux基于systemd自启守护进程 systemctl自定义服务傻瓜式教程
  • HTTP协议和接口测试详解
  • vue3【实战】定义全局方法(两种方案)
  • 基于JavaScript的DBUtils增删改查操作实验
  • 初学stm32 --- 系统时钟配置
  • 实现星星评分系统
  • 数据库建模工具 PDManer
  • 后台运维操作建议
  • NX二次开发调用内部函数设置对象穿透显示DSS_ATTR_set_show_through
  • ubuntu16.04ros-用海龟机器人仿真循线系统
  • 解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
  • HTML综合案例
  • TanStack——为现代前端开发提供高性能和灵活的工具
  • Java爬虫️ 使用Jsoup库进行API请求有什么优势?
  • React源码02 - 基础知识 React API 一览
  • COMSOL with Matlab
  • 【报表查询】.NET开源ORM框架 SqlSugar 系列
  • PostgreSQL数据库访问限制详解
  • 【test linux】创建一个ext4类型的文件系统
  • 如何在繁忙的生活中找到自己的节奏?
  • AI-PR曲线
  • Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类
  • 深入解析 Elasticsearch 集群配置文件参数