当前位置:网站首页>leetcode 2021春季挑战赛 1. 采购方案
leetcode 2021春季挑战赛 1. 采购方案
2022-08-09 03:15:00 【田园诗人之园】
小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。
注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1
示例 1:
输入:nums = [2,5,3,5], target = 6
输出:1
解释:预算内仅能购买 nums[0] 与 nums[2]。
示例 2:
输入:nums = [2,2,1,9], target = 10
输出:4
解释:符合预算的采购方案如下:
nums[0] + nums[1] = 4
nums[0] + nums[2] = 3
nums[1] + nums[2] = 3
nums[2] + nums[3] = 10
提示:
2 <= nums.length <= 10^5
1 <= nums[i], target <= 10^5
通过传统的二层循环的方法,一直提示超时,不管是采用何种优化方法均失败,应该是我没有找到更好的优化方法:
class Solution {
public:
int purchasePlans(vector<int>& nums, int target) {
int n = nums.size();
long long res = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (nums[i] + nums[j] <= target) {
res++;
}
}
}
return res%1000000007;
}
};
通过从左右两边遍历的方法去处理:
1,分别从两头去做处理,nums[0] + nums[n - 1]<= target, 则长度加n - 1;
2,如果nums[i] + nums[j] <= target, 则j++, 表示头部元素向后偏移;
3,如果nums[i] + nums[j] > target, 则i–, 表示尾部元素向前偏移;
class Solution {
public:
int purchasePlans(vector<int>& nums, int target) {
int n = nums.size();
long long res = 0;
int j = 0;
int i = n - 1;
sort(nums.begin(),nums.end());
while (i > j) {
if (nums[i] + nums[j] <= target) {
res += i - j;
j++;
}
else {
i--;
}
}
return res%1000000007;
}
};
边栏推荐
猜你喜欢

高并发+海量数据下如何实现系统解耦?【中】

sql语句实现按顺序排序而不是拼音首字母排序

智能计数器控制板的功能及应用有哪些?

【机器学习】21天挑战赛学习笔记(三)

加密公司集体裁员 以应对加密寒冬和通货膨胀?现加密总市值低于1万亿美元

权限系统就该这么设计(万能通用),稳的一批!

What are the functions and applications of the smart counter control board?

C专家编程 第9章 再论数组 9.3 为什么C语言把数组形参当做指针

甲乙丙丁加工零件,加工的总数是370, 如果甲加工的零件数多10,如果乙加工的零件数少20,如果丙加工的 零件数乘以2,如果丁加工的零件数除以2,四个人的加工数量相等,求甲乙丙丁各自加工多少个零件?

SQL注入(4)
随机推荐
【meet host】
Shell脚本:函数
网路编程_socket返回值
unshift() :将一个或多个元素添加到数组的开头
win10怎么安装.net framework 3.5?
Leetcode刷题——148. 排序链表
Zabbix 5.0 监控教程(四)
让历史文化“活”起来,北京河图“万象中轴”助力打造北京城市金名片
宝塔实测-在线药店商城源码带WAP版
掌握财富密码,运维还要了解这些技术
手把手教你实现buffer(三)——接口及自动扩容
浅聊一下那些营销工具—优惠券
Embedded system driver advanced [2] - platform bus driver development _ basic framework
智能计数器控制板的功能及应用有哪些?
深度学习——以天气识别为例,探讨如何保存神经网络模型
SQL注入(3)
甲乙丙丁加工零件,加工的总数是370, 如果甲加工的零件数多10,如果乙加工的零件数少20,如果丙加工的 零件数乘以2,如果丁加工的零件数除以2,四个人的加工数量相等,求甲乙丙丁各自加工多少个零件?
马斯克被因狗狗币被索赔2580亿美元 操纵价格牟利?狗狗币已下跌92%
创建一个DAPP的全流程
别了,IE浏览器