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

leetcode 2364. 统计坏数对的数目 中等

给你一个下标从 0 开始的整数数组 nums 。如果 i < j 且 j - i != nums[j] - nums[i] ,那么我们称 (i, j) 是一个 数对 。

请你返回 nums 中 坏数对 的总数目。

示例 1:

输入:nums = [4,1,3,3]
输出:5
解释:数对 (0, 1) 是坏数对,因为 1 - 0 != 1 - 4 。
数对 (0, 2) 是坏数对,因为 2 - 0 != 3 - 4, 2 != -1 。
数对 (0, 3) 是坏数对,因为 3 - 0 != 3 - 4, 3 != -1 。
数对 (1, 2) 是坏数对,因为 2 - 1 != 3 - 1, 1 != 2 。
数对 (2, 3) 是坏数对,因为 3 - 2 != 3 - 3, 1 != 0 。
总共有 5 个坏数对,所以我们返回 5 。

示例 2:

输入:nums = [1,2,3,4,5]
输出:0
解释:没有坏数对。

提示:

  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^9

分析:

直接枚举所有数对的时间复杂度为 n 的平方,其中 n 是 nums 的长度,容易超时。可以移动不等式左右两边,将与 i 相关的挪到一边,并将与 j 相关的挪到另一边,即可得到:

nums[i]−i=nums[j]−j

用哈希表去统计每一个 nums[i]−i 的个数,并在从左到右遍历 i 的过程中计算与之不同的个数,将其累加到答案中。遍历结束后可得题目所求。

class Solution {
public:long long countBadPairs(vector<int>& nums) {long long ans=0;map<int,int>mp;for(int i=0;i<nums.size();++i)ans+=i-mp[nums[i]-i],mp[nums[i]-i]++;return ans;}
};

相关文章:

  • RT-Thread开发文档合集
  • Python大小整数池及intern机制详解
  • 模块内聚:理解和优化模块设计的关键
  • Web3架构下的数据隐私与保护
  • 【unity实战】Animator启用root motion根运动动画,实现完美的动画动作匹配
  • 基于大模型的直肠息肉诊疗全流程风险预测与方案优化研究报告
  • Ethernet/IP转ProfiNet边缘计算网关在能源管理中的应用:跨系统数据聚合与智能分析
  • SQL SERVER里面也可以插入存储过程,操作TCP,WEBSOCKET吗?数据发生改变时用于通知客户端
  • 量子神经网络编译器开发指南:从理论突破到产业落地全景解析
  • AbMole推荐——肿瘤类器官加速癌症研究成果产出
  • 安全光幕的CE认证
  • 2025年人工智能指数报告(斯坦福)重点整理
  • 用ffmpeg 实现拉取h265的flv视频转存成264的mp4 实现方案
  • 智慧校园整体解决方案
  • 番外篇 | SEAM-YOLO:引入SEAM系列注意力机制,提升遮挡小目标的检测性能
  • 小说阅读器 ebook-reader
  • Silverlight发展历程(微软2021年已经停止支持Silverlight 5)
  • ESP32之本地HTTP服务器OTA固件升级流程,基于VSCode环境下的ESP-IDF开发(附源码)
  • leetcode0112. 路径总和-easy
  • 每日算法【双指针算法】(Day 2-复写零)
  • 盗播热门影视剧、电影被追究刑事附带民事责任,最高法发声
  • 东北三省,十年少了一个“哈尔滨”
  • 海康威视:去年海外主业和机器人等创新业务占比首次超50%
  • 张小泉:控股股东所持18%股份将被司法拍卖,不会导致控制权变更
  • 景临已任四川省工商联党组书记
  • 2025年青年普法志愿者法治文化基层行活动启动