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

C/C++---------------LeetCode第2824. 统计和小于目标的下标对数目

统计和小于目标的下表对数目

  • 题目及要求
  • 暴力枚举
  • 双指针
  • 在main内使用

题目及要求

给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target ,请你返回满足 0 <= i < j < n 且 nums[i] + nums[j] < target 的下标对 (i, j) 的数目。

示例 1:

输入:nums = [-1,1,2,3,1], target = 2
输出:3
解释:总共有 3 个下标对满足题目描述:

  • (0, 1) ,0 < 1 且 nums[0] + nums[1] = 0 < target
  • (0, 2) ,0 < 2 且 nums[0] + nums[2] = 1 < target
  • (0, 4) ,0 < 4 且 nums[0] + nums[4] = 0 < target
    注意 (0, 3) 不计入答案因为 nums[0] + nums[3] 不是严格小于 target 。
    示例 2:

输入:nums = [-6,2,5,-2,-7,-1,3], target = -2
输出:10
解释:总共有 10 个下标对满足题目描述:

  • (0, 1) ,0 < 1 且 nums[0] + nums[1] = -4 < target
  • (0, 3) ,0 < 3 且 nums[0] + nums[3] = -8 < target
  • (0, 4) ,0 < 4 且 nums[0] + nums[4] = -13 < target
  • (0, 5) ,0 < 5 且 nums[0] + nums[5] = -7 < target
  • (0, 6) ,0 < 6 且 nums[0] + nums[6] = -3 < target
  • (1, 4) ,1 < 4 且 nums[1] + nums[4] = -5 < target
  • (3, 4) ,3 < 4 且 nums[3] + nums[4] = -9 < target
  • (3, 5) ,3 < 5 且 nums[3] + nums[5] = -3 < target
  • (4, 5) ,4 < 5 且 nums[4] + nums[5] = -8 < target
  • (4, 6) ,4 < 6 且 nums[4] + nums[6] = -4 < target

提示:

1 <= nums.length == n <= 50
-50 <= nums[i], target <= 50

暴力枚举

思路:定义ans用于记录数对,双循环逐个去查找,如果和小于目标则累加ans

class Solution {
public:int countPairs(vector<int>& nums, int target) {int n=nums.size();int ans=0;for(int i=0;i<n;++i){for(int j=i+1;j<n;++j){if(nums[i]+nums[j]<target)++ans;}}return ans;}
};

双指针

思路:先排序,然后定义两个指针分别指向头和尾,如果当前数字小于目标值则代表右指针到左指针之间的数字对都满足条件,全部加到ans内,最后不断移动指针完成遍历最后返回ans

class Solution {
public:int countPairs(vector<int>& nums, int target) {sort(nums.begin(), nums.end());  // 对数组进行排序int n = nums.size();  // 数组的大小int ans = 0;  // 记录满足条件的数字对数量int i = 0, j = n - 1;  // 定义两个指针,i指向开头,j指向末尾while (i < j) {  // 当左指针小于右指针时,进行循环if (nums[i] + nums[j] >= target) {  // 如果当前数字对之和大于等于目标值j--;  // 右指针向左移动一位} else {  // 如果当前数字对之和小于目标值ans += j - i;  // 将右指针和左指针之间的数字对数量累加到答案中i++;  // 左指针向右移动一位}}return ans;  // 返回满足条件的数字对数量}
};

在main内使用

int main() {vector<int> nums = {1, 3, 4, 6, 8};int target = 7;int ans = 0;sort(nums.begin(), nums.end());ans = countPairs(nums, target);cout << "数字对之和至少为 " << target << " 的数量为: " << ans << endl;return 0;
}

相关文章:

  • C语言之strstr函数的使用和模拟实现
  • 《数据结构、算法与应用C++语言描述》-代码实现散列表(线性探查与链式散列)
  • 在AWS VPC中运行Nagios检查时指定自定义DNS解析器的选项
  • 7-22 龟兔赛跑
  • SpringBoot——拦截器
  • 【沐风老师】在3dMax中如何把对象随机散布在表面上?
  • 40、Flink 的Apache Kafka connector(kafka source 和sink 说明及使用示例) 完整版
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • [原创](免改BIOS)使用Clover升级旧电脑-(高阶玩法)让固态硬盘内置Win11 PE启动系统
  • 【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)
  • 微服务学习|初识Docker、使用Docker、自定义镜像、DockerCompose、Docker镜像仓库
  • java反序列化漏洞详解
  • requests库的学习(详细篇)
  • 实例讲解Simulink的MATLAB Function模块
  • git本地账户如何从一台电脑迁移到另外一台
  • Druid 在有赞的实践
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Redis的resp协议
  • Shell编程
  • Spring Cloud Feign的两种使用姿势
  • vuex 学习笔记 01
  • Vue学习第二天
  • Windows Containers 大冒险: 容器网络
  • 关于List、List?、ListObject的区别
  • 关于使用markdown的方法(引自CSDN教程)
  • 码农张的Bug人生 - 见面之礼
  • 那些年我们用过的显示性能指标
  • 区块链分支循环
  • 使用putty远程连接linux
  • 温故知新之javascript面向对象
  • 我是如何设计 Upload 上传组件的
  • 写给高年级小学生看的《Bash 指南》
  • 因为阿里,他们成了“杭漂”
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #知识分享#笔记#学习方法
  • $.each()与$(selector).each()
  • (1)STL算法之遍历容器
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (21)起落架/可伸缩相机支架
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (转)Scala的“=”符号简介
  • .NET Core 中的路径问题
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .Net转前端开发-启航篇,如何定制博客园主题