• c_lc_早餐组合(排序+双指针)


    小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。
    注意:答案需要以 1e9 + 7 (1000000007) 为底取模
    提示:
    1 <= staple.length <= 10^5
    1 <= drinks.length <= 10^5

    方法一:排序+双指针

    这题第一感觉就是排序,固定 staple 的某个位置,然后从后往前遍历 drinks,找到符合条件的最后一个位置 j,对答案的贡献就是 j+1

    感觉数据没有卡这个算法,如果每次都遍历了一遍 drinks 算法会变成 O(nm),铁定超时

    class Solution {
    public:
        int breakfastNumber(vector<int>& s, vector<int>& d, int x) {
            int n=s.size(), m=d.size(), ans=0, mod=1e9+7;
            sort(s.begin(), s.end());
            sort(d.begin(), d.end());
            int j=m-1;
            for (int i=0; i<n; i++) {
                while (j>=0 && s[i]+d[j]>x) j--;
                if (j==-1) break;
                ans=(ans+j+1)%mod;
            }
            return ans;
        }
    };
    

    复杂度分析

    • Time\(O(nlogn)\)
    • Space\(O(1)\)
  • 相关阅读:
    十月二十七学习报告
    十月二十六学习报告
    十月二十五学习报告
    十月二十四学习报告
    十月二十三学习报告
    十月二十二学习报告
    十月二十一学习报告
    十月十九学习报告
    十月十七学习报告
    十月十六学习报告
  • 原文地址:https://www.cnblogs.com/wdt1/p/13662992.html
Copyright © 2020-2023  润新知