目录
题目:
c++解法:
题意
思路
代码
代码详解:
python3解法:
算法描述:
代码:
代码详解:
「云闪付」作为各方联手打造的全新移动端统一入口,致力成为消费者省钱省心的移动支付管家。
请你设计一个「云闪付」优惠活动管理系统 DiscountSystem
,具体功能如下:
AddActivity(int actId, int priceLimit, int discount, int number, int userLimit)
-- 表示创建编号为 actId
的优惠减免活动:
priceLimit
时,可享受 discount
的减免userLimit
次number
数量的参加名额RemoveActivity(actId)
-- 表示结束编号为 actId
的优惠活动
Consume(int userId, int cost)
-- 表示用户 userId
产生了一笔原价为 cost
的消费。请返回用户的实际支付金额。
注:若有多个优惠减免最大的活动,优先参加
actId
最小的活动
注意:
actId
全局唯一示例 1:
输入:
["DiscountSystem","addActivity","consume","removeActivity","consume"]
[[],[1,15,5,7,2],[101,16],[1],[102,19]]
输出:
[null,null,11,null,19]
解释:
DiscountSystem obj = DiscountSystem(); // 初始化系统
obj.addActicity(1,15,5,7,2); //创建编号1
的优惠活动,单笔消费原价不小于15
时,
可享受5
的减免,优惠活动共有7
个名额,每个用户最多参与该活动2
次
obj.consume(101,16); //用户101
消费了16
,满足优惠活动1
条件,返回实际支付16 - 5 = 11
obj.removeActivity(1); // 结束编号为1
的优惠活动
obj.consume(102,19); //用户101
消费了19
,目前不存在任何优惠活动,需按原价支付,返回19
示例 2:
输入:
["DiscountSystem","addActivity","addActivity","consume","removeActivity","consume","consume","consume","consume"]
[[],[1,10,6,3,2],[2,15,8,8,2],[101,13],[2],[101,17],[101,11],[102,16],[102,21]]
输出:
[null,null,null,7,null,11,11,10,21]
解释:
DiscountSystem obj = DiscountSystem(); // 初始化系统
obj.addActivity(1,10,6,3,2); // 创建编号1
的优惠活动,单笔消费原价不小于10
时,
可享受6
的减免,优惠活动共有3
个名额,每个用户最多参与该活动2
次
obj.addActivity(2,15,8,8,2); // 创建编号2
的优惠活动,单笔消费原价不小于15
时,
可享受8
的减免,优惠活动共有8
个名额,每个用户最多参与该活动2
次
obj.consume(101,13); // 用户101
消费了13
,仅满足优惠活动1
条件,返回实际支付13 - 6 = 7
用户101
参加1
次活动1
,活动1
剩余2
个名额
obj.consume(101,8); // 用户101
消费了8
,不满足任何活动,返回支付原价8
obj.removeActivity(2); // 结束编号为2
的活动
obj.consume(101,17); // 用户101
消费了17
,满足优惠活动1
条件,返回实际支付17 - 6 = 11
用户101
参加2
次活动1
,活动1
剩余1
个名额