2563. 统计公平数对的数目

题目链接:2563. 统计公平数对的数目

方法:排序 + 二分

解题思路

(1)先对数组进行排序,排序之后并不影响公平数对的数目;
(2)对于任意一个 j,它的公平数对 (i,j) 满足 lowernums[j]nums[i]uppernums[j],即在 [0,j] 范围中找满足条件的 i 的个数,通过二分查找可以快速找到。

代码

class Solution {
public:
    long long countFairPairs(vector<int>& nums, int lower, int upper) {
        sort(nums.begin(), nums.end());
        int n = nums.size();
        long long ans = 0;
        for (int i = 0; i < n; i ++ ) {
            int l = lower_bound(nums.begin() + i + 1, nums.end(), lower - nums[i]) - nums.begin();
            int r = upper_bound(nums.begin() + i + 1, nums.end(), upper - nums[i]) - nums.begin();
            ans += r - l;
        }
        return ans;
    }
};

复杂度分析

时间复杂度:O(nlogn)
空间复杂度:O(1)

posted @   lixycc  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示