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

寒假刷题Day17

一、2824. 统计和小于目标的下标对数目

class Solution {
public:
    int countPairs(vector<int>& nums, int target) {
        int cnt = 0;
        sort(nums.begin(), nums.end());
        int left = 0, right = nums.size() - 1;
        while(left < right){
            if(nums[left] + nums[right] < target){
                cnt += right - left;
                left++;
            }else{
                right--;
            }
        }
        return cnt;
    }
};

  // 如果 nums[left] + nums[right] < target,那么 nums[left] 与 nums[left+1..right] 都满足条件

二、LCP 28. 采购方案

class Solution {
public:
    int purchasePlans(vector<int>& nums, int target) {
        long long res = 0;
        long long mod = 1000000007;
        sort(nums.begin(),nums.end());
        int i=0,j = nums.size()-1;
        for(i=0;i<j;i++)
        {
            while(j>i&&nums[i]+nums[j]>target)
            {
                j--;
            }
            res += j-i;
        }
        return res%mod;
    }
};

题目给我整懵了,还是看题解才明白意思,来自ai的解释:

小力的问题有一个特别的小要求哦~听好啦:

🌟 魔法数字游戏规则 🌟
如果答案是一个超级超级大的数字(比如像天上的星星那么多),我们要用一个魔法数字(1000000007)来帮忙。
怎么玩呢?
1️⃣ 先算出答案(比如 1000000008)。
2️⃣ 减去魔法数字(1000000007),剩下的就是小答案(1000000008 - 1000000007 = 1)。
3️⃣ 最后告诉小力的是这个小答案(1)哦!

就像数到 10 要重新从 1 开始一样,数到魔法数字也要重新开始!✨

三、15. 三数之和

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        // 剪枝
        if(nums.size() < 3)return{};


        sort(nums.begin(),nums.end());
        vector<vector<int>> ans;

        for(int i = 0; i < nums.size(); ++i){
            // 检测重复的 nums[i]
            if(i > 0 && nums[i] == nums[i-1]) continue;

            int left = i + 1;
            int right = nums.size() - 1;

            // 比较三数之和           
            while(left < right){
                int sum = nums[i] + nums[left] + nums[right];

                // 去重
                while(left <right && nums[left] == nums[left + 1]) left++;
                while(left < right && nums[right] == nums[right - 1]) right--;

                // 去重后两数之和
                if(sum > 0) right--;

                // 等同于判断 nums[l] + nums[r] < -nums[i]
                else if(sum < 0) left++;

                // nums[l] + nums[r] == nums[i], 三元组符合,添加入结果
                else {
                    ans.push_back({nums[i], nums[left], nums[right]});
                    left++; 
                    right--;
                }
            }
        }
        return ans;
    }
};


http://www.kler.cn/a/523082.html

相关文章:

  • 【每日一A】2015NOIP真题 (二分+贪心) python
  • 知识库管理驱动企业知识流动与工作协同创新模式
  • 力扣【669. 修剪二叉搜索树】Java题解
  • [A-29]ARMv8/v9-GIC-中断子系统的安全架构设计(Security/FIQ/IRQ)
  • JJJ:linux时间子系统相关术语
  • python Flask-Redis 连接远程redis
  • 【福州市AOI小区面】shp数据学校大厦商场等占地范围面数据内容测评
  • WebForms SortedList 深度解析
  • 【洛谷】P1111 修复公路(学习记录)
  • LangGraph系列-1:用LangGraph构建简单聊天机器人
  • Python3 【正则表达式】水平考试:精选试题和答案
  • 汽车制造案例 | 搭建车间现场数字可视化管理方案(附解决模板)
  • VMware 和本机(Win10)安装共享文件
  • 2025数学建模美赛|赛题翻译|C题
  • Linux探秘坊-------5.git
  • Linux生产者消费者模型
  • .NET Core缓存
  • TCP是怎么判断丢包的?
  • 用WinForm如何制作简易计算器
  • C# lock使用详解
  • 天猫超市卡绑卡 分析
  • 启元世界(Inspir.ai)技术浅析(二):深度强化学习
  • Kotlin 2.1.0 入门教程(九)
  • 智能调度体系与自动驾驶技术优化运输配送效率的研究——兼论开源AI智能名片2+1链动模式S2B2C商城小程序的应用潜力
  • 基于微信小程序的4S店客户管理系统设计与实现(LW+源码+讲解)
  • 学习资料收藏 游戏开发