当前位置: 首页 > 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;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 云主机部署 TiDB 测试集群
  • 景联文科技:一文详解如何构建高质量SFT数据
  • java基础03——Arrays.asList与ArrayList的区别(基本概念、用法、使用场景)
  • 24/8/17算法笔记 模仿学习算法
  • Spring中AbstractAutowireCapableBeanFactory
  • Unity3D开发之OnCollisionXXX触发条件
  • Spring Boot集成Devtools实现热更新?
  • 8.15 day bug
  • 最佳薪酬管理系统盘点:9款优选推荐
  • 微信答题小程序产品研发-后端开发
  • 重复的子字符串 | LeetCode-459 | 字符串匹配 | KMP | 双指针
  • 融合创新:EasyCVR视频汇聚平台云计算技术与AI技术共筑雪亮工程智能防线
  • WEB漏洞-SQL注入之简要SQL注入
  • 零售业务产品系统应用架构设计(三)
  • 牛客网SQL 练习 一
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Idea+maven+scala构建包并在spark on yarn 运行
  • leetcode98. Validate Binary Search Tree
  • MySQL数据库运维之数据恢复
  • React+TypeScript入门
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Service Worker
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 第2章 网络文档
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 缓存与缓冲
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 微信公众号开发小记——5.python微信红包
  • 延迟脚本的方式
  • 译自由幺半群
  • const的用法,特别是用在函数前面与后面的区别
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #define,static,const,三种常量的区别
  • #Java第九次作业--输入输出流和文件操作
  • (搬运以学习)flask 上下文的实现
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (转)【Hibernate总结系列】使用举例
  • (转)linux下的时间函数使用
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .ai域名是什么后缀?
  • .chm格式文件如何阅读
  • .NET 8.0 发布到 IIS
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Memory Profiler的使用举例
  • .Net 代码性能 - (1)