当前位置: 首页 > 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;
}
http://www.lryc.cn/news/242675.html

相关文章:

  • 【深度学习】因果推断与机器学习
  • HTTPS攻击怎么防御?
  • kubernetes|云原生|Deployment does not have minimum availability 的解决方案(资源隐藏的由来)
  • 2023.11.22 IDEA Spring Boot 项目热部署
  • CentOS rpm安装Nginx和配置
  • 【pandas】数据透视表【pivot_table】
  • ubuntu22.04中ros2 安装rosbridge
  • 不单一的错误!如何修复Windows 10上“未安装音频输出设备”的错误
  • winlogbeat采集windows日志
  • 关于ElectronVue3中集成讯飞星火AI
  • 初识JVM(简单易懂),解开JVM神秘的面纱
  • Open3D (C++) 计算两点云之间的最小距离
  • 51单片机演奏兰亭序
  • 计算机编程零基础编程学什么语言,中文编程工具构件简介软件下载
  • zookeeper单机版的搭建
  • roseha for windows 11+oracle 11g部署过程
  • 机器学习与因果推断的高级实践 | 数学建模
  • go语言实现高性能自定义ip管理模块(ip黑名单)
  • 检索增强生成架构详解【RAG】
  • 高清动态壁纸软件Live Wallpaper Themes 4K mac中文版功能
  • Kafka配置SASL认证密码登录
  • 两年功能五年自动化测试面试经验分享
  • 大数据基础设施搭建 - Kafka(with ZooKeeper)
  • [JVM] 京东一面~说一下Java 类加载过程
  • 2023 年 认证杯 小美赛 ABC题 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析
  • N-134基于java实现捕鱼达人游戏
  • MTK联发科MT6762/MT6763/MT6765安卓核心板参数规格比较
  • 仿ChatGPT对话前端页面(内含源码)
  • js粒子效果(一)
  • 程序员必备工具篇 / 程序员必备基础:Git