【OJ刷题】双指针问题4

news/2024/9/23 0:09:05/
这里是阿川的博客,祝您变得更强

✨ 个人主页:在线OJ的阿川
💖文章专栏:OJ刷题入门到进阶
🌏代码仓库:


写在开头

现在您看到的是我的结论或想法但在这背后凝结了大量的思考、经验和讨论


在这里插入图片描述

在这里插入图片描述

目录

  • 1. 题目介绍
  • 2. 题目拆解
  • 3. 具体详情
  • 4. 具体代码


1. 题目介绍

难度:中
题目练习:有效三角形的个数
题目信息:给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。
举个例子: 具体如图1所示
在这里插入图片描述

图1 举个例子

2. 题目拆解

本质上:观察规律,利用单调性
特点是:在组合搭配中有一定单调性规律
解决方法:双指针算法,如图2所示
在这里插入图片描述

图2 双指针

3. 具体详情

1. 先进行排序
2. 固定其中最大的数,再将最小和第二大数作为双指针对最大数进行比较
3. 两种情况:

  • 最小和第二大数之和大于最大数,则中间数与第二大数组合均符合要求,再将第二大树数移动减小
  • 最小和第二大数之和小于或等于最大数,则中间数与最小数组合均不符合要求,再将最小数移动增大

4. 最后再将最大数移动减小,直至遍历完整个数组


4. 具体代码

class Solution {
public:int triangleNumber(vector<int>& nums){// 进行排序sort(nums.begin(), nums.end());int sum = 0, n = nums.size();// 固定最大值for(int i = n - 1; i >= 2; i--){int left = 0, right = i - 1;// 两种情况具体实现while(left < right){if(nums[left] + nums[right] > nums[i]){sum += right - left;right--;}else{left++;}}}return sum;}
};

5. 夹带私货

若你能看到看到这篇文章且能看到这,则说明你我有缘留个关注吧,后面还会接着计算机408、底层原理、开源项目、以及数据、后端研发相关、实习、笔试/面试、秋招/春招、各种竞赛相关、简历相关、考研、学术相关……,祝你我变得更强


好的,到此为止啦,祝您变得更强
在这里插入图片描述

在这里插入图片描述

道阻且长 行则将至
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

http://www.ppmy.cn/news/1529067.html

相关文章

车辆重识别(CVPR2016图像识别的深度残差学习ResNet)论文阅读2024/9/21

[2] Deep Residual Learning for Image Recognition ( CVPR 2016) 作者&#xff1a;Kaiming He Xiangyu Zhang Shaoqing Ren Jian Sun 单位&#xff1a;微软研究院 摘要&#xff1a; 更深层的神经网络更难训练。我们提出了一个残差学习框架&#xff0c;以减轻对比先前使用的深…

解决Mac下Vscode编译运行C语言程序会自动生成DSYM文件夹的问题

&#x1f389; 前言 好久没写C语言了&#xff0c;今天打开Vscode打算写点程序练练手&#xff0c;结果发现一个让我非常苦恼的事情&#xff0c;那就是每次我运行程序的时候&#xff0c;左侧的资源管理器就会生成一大堆的文件&#xff0c;如图&#xff1a; 强迫症犯了&#xff…

【webpack4系列】编写可维护的webpack构建配置(四)

文章目录 构建配置包设计功能模块设计和目录结构设计功能模块设计目录结构设计 使用ESLint规范构建脚本冒烟测试介绍和实际运用冒烟测试 (smoke testing)冒烟测试执行判断构建是否成功判断基本功能是否正常 单元测试和测试覆盖率测试框架编写单元测试用例单元测试接入测试覆盖率…

【Flutter】Flutter局部刷新的几种方式

前言 在Flutter开发中&#xff0c;我们会根据一些状态的值来改变UI样式&#xff0c;setState也是我们常用的状态刷新方式&#xff1b;但是当我们的页面布局比较复杂的时候&#xff0c;我们再用setState的时候&#xff0c;整个页面就会重绘&#xff0c;比较影响APP的性能&#…

Redis安装 ▎Redis详细知识点

前言: Redis是一个开源的内存数据结构存储&#xff0c;支持丰富的数据类型&#xff0c;如字符串、哈希、列表、集合和有序集合,作为一个键值对数据库&#xff0c;Redis能提供毫秒级的响应时间&#xff0c;适合高并发应用场景。它还支持持久化&#xff0c;将内存数据定期保存到…

5.内容创作的未来:ChatGPT如何辅助写作(5/10)

引言 在信息爆炸的时代&#xff0c;内容创作已成为连接品牌与受众、传递信息与知识、以及塑造文化与观念的重要手段。随着数字媒体的兴起&#xff0c;内容创作的需求日益增长&#xff0c;对创作者的写作速度和质量提出了更高的要求。人工智能&#xff08;AI&#xff09;技术的…

家政小程序开发/源码/上门维修/上门保洁服务平台

开发一个家政小程序是一个涉及多方面技术的项目&#xff0c;主要目标是为用户提供便捷的家政服务预约、查询和管理功能。以下是一个简要的开发流程和一些关键点&#xff0c;帮助你开始这个项目&#xff1a; 1.需求分析 用户调研&#xff1a;了解目标用户群体&#xff08;如家庭…

图像分割基本知识

计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割 图像分割 一、目标分割1.1 图像分割的定义1.2 任务类型1.2.1 任务描述1.2.2 任务类型 二、语义分割2.1 FCN网络2.1.1网络结构 2.2 Unet网络 三、UNet案例3.1 数据集获取3.1.1 设置相关信息3.1.2 图像…