专栏首页刷题笔记【LeetCode第20场夜猫赛】5324. 每隔 n 个顾客打折

【LeetCode第20场夜猫赛】5324. 每隔 n 个顾客打折

超市里正在举行打折活动,每隔 n 个顾客会得到 discount 的折扣。

超市里有一些商品,第 i 种商品为 products[i] 且每件单品的价格为 prices[i] 。

结账系统会统计顾客的数目,每隔 n 个顾客结账时,该顾客的账单都会打折,折扣为 discount (也就是如果原本账单为 x ,那么实际金额会变成 x - (discount * x) / 100 ),然后系统会重新开始计数。

顾客会购买一些商品, product[i] 是顾客购买的第 i 种商品, amount[i] 是对应的购买该种商品的数目。

请你实现 Cashier 类:

Cashier(int n, int discount, int[] products, int[] prices) 初始化实例对象,参数分别为打折频率 n ,折扣大小 discount ,超市里的商品列表 products 和它们的价格 prices 。 double getBill(int[] product, int[] amount) 返回账单的实际金额(如果有打折,请返回打折后的结果)。返回结果与标准答案误差在 10^-5 以内都视为正确结果。

示例 1:

输入

 ["Cashier","getBill","getBill","getBill","getBill","getBill","getBill","getBill"]
 [[3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]],[[1,2],[1,2]],[[3,7],[10,10]],[[1,2,3,4,5,6,7],[1,1,1,1,1,1,1]],[[4],[10]],[[7,3],[10,10]],[[7,5,3,1,6,4,2],[10,10,10,9,9,9,7]],[[2,3,5],[5,3,2]]]

输出

 [null,500.0,4000.0,800.0,4000.0,4000.0,7350.0,2500.0]

解释

 Cashier cashier = new Cashier(3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]);
 cashier.getBill([1,2],[1,2]);                        // 返回 500.0, 账单金额为 = 1 * 100 + 2 * 200 = 500.
 cashier.getBill([3,7],[10,10]);                      // 返回 4000.0
 cashier.getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]);    // 返回 800.0 ,账单原本为 1600.0 ,但由于该顾客是第三位顾客,他将得到 50% 的折扣,所以实际金额为 1600 - 1600 * (50 / 100) = 800 。
 cashier.getBill([4],[10]);                           // 返回 4000.0
 cashier.getBill([7,3],[10,10]);                      // 返回 4000.0
 cashier.getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]); // 返回 7350.0 ,账单原本为 14700.0 ,但由于系统计数再次达到三,该顾客将得到 50% 的折扣,实际金额为 7350.0 。
 cashier.getBill([2,3,5],[5,3,2]);                    // 返回 2500.0
 

提示:

1 <= n <= 10^4 0 <= discount <= 100 1 <= products.length <= 200 1 <= products[i] <= 200 products 列表中 不会 有重复的元素。 prices.length == products.length 1 <= prices[i] <= 1000 1 <= product.length <= products.length product[i] 在 products 出现过。 amount.length == product.length 1 <= amount[i] <= 1000 最多有 1000 次对 getBill 函数的调用。 返回结果与标准答案误差在 10^-5 以内都视为正确结果。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/apply-discount-every-n-orders

我没做上来,看大佬的思路学习一下

class Solution {
public:
    int numberOfSubstrings(string s) {
        int n=s.size();
        int ans=0;
        int a=0,b=0,c=0;
        int i=0,j=0;
        for(int i=0;i<n-2;i++)
        {
            bool flag=false;
            while(!a||!b||!c){
                if(j>=n)break;
                if(s[j]=='a')a++;
                else if(s[j]=='b')b++;
                else c++;
                j++;
            }
            if(a&&b&&c)ans+=n-j+1;
            else break;
            if(s[i]=='a')a--;
            else if(s[i]=='b')b--;
            else c--;
        }
        return ans;
    }
};
  if(a&&b&&c)ans+=n-j+1;
             else break;
             if(s[i]=='a')a--;
             else if(s[i]=='b')b--;
             else c--;

这里太巧妙了,我当时想了半天都没有想到如此简洁的结构,表达我想要的需求。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【未完成】【PAT520 钻石争霸赛】7-7 阶乘的非零尾数 (20分)

    “求 N 阶乘末尾的第一个非零数字”是一道常见的企业笔试题。这里我们略微做个变化,求 N 阶乘末尾的第一个非零 K 位数,同时输出末尾有多少个零。

    韩旭051
  • 【LeetCode第20周夜猫赛】5324. 每隔 n 个顾客打折

    超市里有一些商品,第 i 种商品为 products[i] 且每件单品的价格为 prices[i] 。

    韩旭051
  • 【LeetCode】9. Palindrome Number

    Determine whether an integer is a palindrome. An integer is a palindrome when it...

    韩旭051
  • LeetCode 第 20 场双周赛(294 / 1541,前19.07%,第1次全部通过)

    全国排名:294/1541,前19.07%;全球排名:885/4347,前20.4%

    Michael阿明
  • 小朋友学C语言(15):“变量==常量”与“常量==变量”的区别

    (一)编写程序 #include <stdio.h> int main() { int x = 10; if(x == 10) { ...

    海天一树
  • 为新兴物联网公司提供五项免费营销技巧

    原文地址:https://internetofthingsagenda.techtarget.com/blog/IoT-Agenda/Five-free-mar...

    双愚
  • 再爬 Boss 直聘,探究哪种岗位更好就业

    不知不觉,十月份已经过去了,传说中的金九银十招聘季也应该随之结束了,不知道有换工作打算的朋友有没有找到理想的下家,反正我没有

    周萝卜
  • 51Nod--1004 n^n的末位数字

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1004

    指点
  • No.009 Palindrome Number

    9. Palindrome Number Total Accepted: 136330 Total Submissions: 418995 Difficulty...

    mukekeheart
  • 《编程之美》读书笔记(一)——中国象棋将帅有效位置

    《编程之美》读书笔记(一) ——中国象棋将帅有效位置 (原创内容,转载请注明来源,谢谢) 一、问题 ? 如上述棋盘,假设将为点A,帅为点B。将只能在d10...

    用户1327360

扫码关注云+社区

领取腾讯云代金券