【刷题篇】双指针(二)

文章目录

  • 1、有效三角形的个数
  • 2、查找总价格为目标值的两个商品
  • 3、三数之和
  • 4、四数之和

1、有效三角形的个数

给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

在这里插入图片描述

class Solution {
public:int triangleNumber(vector<int>& nums) {int n=nums.size();int count=0;sort(nums.begin(),nums.end());for(int i=n-1;i>=2;i--){if(nums[i]==0)continue;int left=0;int right=i-1;while(left<right){if(nums[left]+nums[right]>nums[i]){count+=(right-left);right--;}elseleft++;}}return count;}
};

2、查找总价格为目标值的两个商品

购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。
在这里插入图片描述

class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {int n=price.size();int left=0;int right=n-1;while(left<right){if((price[left]+price[right])==target)return {price[left],price[right]};else if((price[left]+price[right])<target)left++;elseright--;}return {};}
};

3、三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
在这里插入图片描述

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n=nums.size();sort(nums.begin(),nums.end());set<vector<int>> ret;for(int i=0;i<n-2;i++){if(nums[i]>0)break;int left=i+1;int right=n-1;while(left<right){if((nums[left]+nums[right])==-(nums[i])){ret.insert({nums[i],nums[left],nums[right]});left++;right--;}else if((nums[left]+nums[right])>-(nums[i]))right--;elseleft++;} }vector<vector<int>> dummy(ret.begin(),ret.end());return dummy;}
};

4、四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。
在这里插入图片描述

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {int n=nums.size();set<vector<int>> ret;sort(nums.begin(),nums.end());for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){int left=j+1;int right=n-1;while(left<right){long long sum=(long long)target-nums[i]-nums[j];if(sum==(nums[left]+nums[right])){ret.insert({nums[i],nums[j],nums[left],nums[right]});left++;right--;}else if(sum>(nums[left]+nums[right]))left++;elseright--;}}}vector<vector<int>> dummy(ret.begin(),ret.end());return dummy;}
};

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

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

相关文章

C51版本Keil + STC-ISP 实现第一盏灯,从创建到实现

创建项目 1. 新建项目 Project -> New uVision Project 2.1 新建文件夹 2.2 输入文件名称, 并保存 3.1 选择当前位STC芯片的开发板&#xff0c;选择STC MCU Database 搜素具体芯片型号&#xff0c;进行配置&#xff1a; 3.2 选择通过搜索框搜索到stc相关芯片信息 如果st…

OpenCV 入门(四)—— 车牌号识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

O2O:Uni-O4

ICLR 2024 paper Intro 以往O2O方式普遍将离线与在线过程分开看待&#xff0c;为了避免过渡时容易出现performance drop&#xff0c;引入了各式正则化或者保守价值估计。本文启发于BPPO&#xff0c;提出on-policy的算法Uni-O4将离线与在线阶段的策略优化目标统一&#xff0c;…

初识C++ · 模板初阶

目录 1 泛型编程 2 函数模板 3 类模板 1 泛型编程 模板是泛型编程的基础&#xff0c;泛型我们碰到过多次了&#xff0c;比如malloc函数返回的就是泛型指针&#xff0c;需要我们强转。 既然是泛型编程&#xff0c;也就是说我们可以通过一个样例来解决类似的问题&#xff0c…

AI图书推荐:AI在语言学习教育领域的应用和挑战

这本书《AI在语言学习教育领域的应用和挑战》&#xff08;AI in Language Teaching, Learning, and Assessment&#xff09;由Fang Pan编辑&#xff0c;出版于IGI Global&#xff0c;主要探讨了人工智能&#xff08;AI&#xff09;在语言教育领域的应用、挑战以及潜在的益处。 …

C++:菱形继承与菱形虚拟继承

一、菱形继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或以上直接父类时称这个继承关系为多继承 菱形继承&#xff1a;菱形继承是多继承的一种特殊情况&#xff0c;派生类继承自两个间接基类&#xff0c;而这…

java--io流(一)

1. 前置知识 字符集是什么&#xff1f; 字符集&#xff08;Character Set&#xff09;是一组字符的集合&#xff0c;它定义了可以在计算机系统中使用的所有字符。字符集可以包括字母、数字、标点符号、控制字符、图形符号等。字符集使得计算机能够存储、处理和显示各种语言和…

理解DPI:从数码到打印的深入分析

目录标题 1. DPI的定义2. DPI与图像质量2.1. 对于打印来说&#xff1a;2.2. 对于屏幕显示来说&#xff1a; 3. 如何计算DPI4. 调整DPI4.1. 提高DPI&#xff1a;4.2. 降低DPI&#xff1a; 5. DPI与图像文件大小的关系6. 实际应用中的DPI6.1. 专业打印&#xff1a;6.2. 屏幕设计&…

如何在Ubuntu系统上定制文件系统

基于全志T507H处理器设计研发的OKT507-C开发板为例进行介绍。 Forlinx Desktop(Ubuntu)系统基于Ubuntu官方为嵌入式设备制作的操作系统-Lubuntu&#xff0c;该操作系统具备apt-get、ldd等常用的命令&#xff0c;若需要安装软件则直接apt-get在线安装即可&#xff0c;不需进行交…

DDPM与扩散模型

很早之前就新建了一个专栏从0开始弃坑扩散模型 ,但发了一篇文章就没有继续这一系列&#xff0c;在这个AIGC的时代&#xff0c;于是我准备重启这个专栏。 整个专栏的学习顺序可以见这篇汇总文章 这是本专栏的第一章 目录 引言生成模型的发展历程 引言 扩散模型( Diffusion Mode…

数据结构-线性表-链表-2.3-6

有一个带头结点的单链表L&#xff0c;设计一个算法使其元素递增有序。 void sort(Linklist &L){LNode *pL->next,*pre;LNode *rp->next;p->nextNULL;pr;while(p){rp->next;preL;while(pre->next!NULL&&pre->next->data<p->data){prepre…

ACM实训冲刺第一天

目录 ACM实训课程考核 考核内容 备赛安排 推荐学习资源 ACM实训准备规划 前话 历届习题&#xff08;未曾改变&#xff09; 第0套 第1套 第2套 第3套 第4套 规划 5.8 - 5.12 &#xff08;11周&#xff09; 5.13-5.19&#xff08;12周&#xff09; 5.20-5.26&…