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

【题目/训练】:双指针

引言

我们已经在这篇博客【算法/学习】双指针-CSDN博客里面讲了双指针、二分等的相关知识。

现在我们来做一些训练吧 

经典例题

1. 移动零

 思路:
  使用 0 当做这个中间点,把不等于 0(注意题目没说不能有负数)放到中间点的左边,等于 0 的放到其右边。
这的中间点就是 0 本身,所以实现起来比快速排序简单很多,然后使用双指针 i 和 j,只要 nums[i]!=0,我们就交换 nums[i] 和 nums[j]

class Solution {
public:void moveZeroes(vector<int>& nums) {if (nums.size() == 0) return;// 双指针,前后交换即可int j = 0;for (int i = 0; i < nums.size(); i++) {//当前元素!=0,就把其交换到左边,等于0的交换到右边if (nums[i] != 0) {swap(nums[i], nums[j++]);}}}
};

2. 复写零

思路:

class Solution {
public:void duplicateZeros(vector<int>& arr) {// 1. 找到最后一个复写数 int cur = 0, dest = -1, n = arr.size();while (cur < n){if (arr[cur]) dest++;else dest += 2;if (dest >= n - 1) break;cur++;}// 2. 处理边界清空if (dest == n){arr[n - 1] = 0;cur--, dest -= 2;}// 3. 从后往前完成复写操作while (cur >= 0){if (arr[cur]) arr[dest--] = arr[cur--];else{arr[dest--] = 0;arr[dest--] = 0;cur--;}}}
};

3. 有效三角形的个数

思路:

首先对数组排序。
固定最短的两条边,二分查找最后一个小于两边之和的位置。可以求得固定两条边长之和满足条件的结果。枚举结束后,总和就是答案。

class Solution {
public:int triangleNumber(vector<int>& nums) {// 1. 排序来优化sort(nums.begin(), nums.end());// 2. 利用双指针来解决问题 int ret = 0, n = nums.size();for (int i = n - 1; i >= 2; i--) // 先固定最大的数{// 利用双指针快速统计符合要求的三元组个数int l = 0, r = i - 1;while (l < r){if (nums[l] + nums[r] > nums[i]){ret += r - l;r--;}else l++;}}return ret;}
};

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

相关文章:

  • LLVM - 编译器后端-指令选择
  • ES+FileBeat+Kibana日志采集搭建体验
  • Dockerfile常用指令详解
  • 【vue】浏览器兼容相关
  • 【区块链+金融服务】基于区块链的区域股权金融综合服务平台 | FISCO BCOS应用案例
  • string字符串和json对象相互转换问题
  • 【生成式人工智能-十一一个不修改模型就能加速语言模型生成的方法】
  • Rust 错误处理
  • 程序与进程 linux系统
  • 使用MongoDB构建AI:Story Tools Studio将生成式AI引入Myth Maker AI游戏
  • 鸿蒙UIAbility组件概述(二)
  • Oracle(70)如何优化SQL查询?
  • 深度剖析:Jenkins构建任务无法中断的原因及解决方案
  • 【YOLO】常用脚本
  • Springboot IOC DI理解及实现+JUnit的引入+参数配置
  • CeresPCL 最小二乘插值(曲线拟合)
  • 【TCP/IP】自定义应用层协议,常见端口号
  • Frida 的下载和安装
  • 后端开发刷题 | 链表内指定区间反转【链表篇】
  • 【NVMe系列-提问页与文章总结页面】
  • 用生成器函数生成表单各字段
  • 【xilinx】O-RAN 无线电接口 - Vivado 2020.1 及更新工具版本的发行说明
  • 结营考试- 算法进阶营地 - DAY11
  • 设计模式: 访问者模式
  • selenium底层原理详解
  • 【Solidity】继承
  • docker 安装mino服务,启动报错: Fatal glibc error: CPU does not support x86-64-v2
  • 地图相册系统的设计与实现
  • 使用vh和rem实现元素响应式布局
  • 螺旋矩阵 II(LeetCode)