[LeetCode 1356~1359][周赛]双周赛20题解

  1. 根据数字二进制下 1 的数目排序

题目链接

static const auto io_speed_up = [](){
    ios::sync_with_stdio(false);
    cin.tie(0);
    return 0;
}();
class Solution {
public:
    int cnt[10010];
    vector<int> sortByBits(vector<int>& arr) {
        for(auto p : arr)cnt[p] = __builtin_popcount(p);
        sort(arr.begin(), arr.end(), [&](int a,int b){return cnt[a]==cnt[b]?a<b:cnt[a]<cnt[b];});
        return arr;
    }
};
  1. 每隔 n 个顾客打折

题目链接

static const auto io_speed_up = [](){
    ios::sync_with_stdio(false);
    cin.tie(0);
    return 0;
}();
class Cashier {
public:
    int fn , p = 0;
    int mp[205];
    double dc;
    Cashier(int n, int discount, vector<int>& products, vector<int>& prices) {
        fn = n;dc = (100.0 - discount)/100;
        n = products.size();
        for(int i = 0;i<n;i++){
            mp[products[i]]=prices[i];
        }
    }
    
    double getBill(vector<int> product, vector<int> amount) {
        double ans = 0;
        int n = product.size();
        for(int i = 0;i<n;i++){
            ans += (amount[i] * mp[product[i]]);
        }
        p++;
        if(p == fn){p = 0;return ans * dc;}
        else return ans;
    }
};

/**
 * Your Cashier object will be instantiated and called as such:
 * Cashier* obj = new Cashier(n, discount, products, prices);
 * double param_1 = obj->getBill(product,amount);
 */
  1. 包含所有三种字符的子字符串数目

题目链接

static const auto io_speed_up = [](){
    ios::sync_with_stdio(false);
    cin.tie(0);
    return 0;
}();
typedef long long LL;
class Solution {
public:
    int cnt[3]={0};
    int numberOfSubstrings(string s) {
        int len = s.size();
        LL ans = 0;
        int l = 0, r = -1;
        int is = 0;
        while(l<len){
            if(is==3){
                ans += (len - r);
                cnt[s[l]-'a']--;
                if(!cnt[s[l++]-'a'])is--;
            }
            else {
                if(++r==len)break;
                if(!(cnt[s[r]-'a']++))is++;
            }
        }
        return ans;
    }
};
  1. 有效的快递序列数目

题目链接

class Solution {
public:
    typedef long long LL;
    const LL mod = 1e9 + 7;
    int countOrders(int n) {
        LL p = 1;
        for(int i = 1;i<n;i++){
           p =  (LL)(i*2+1)* (i + 1)%mod * p %mod;
        }
        return p;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值