3-19 博乐科技C++笔试部分题解

全是暴力的题也没啥可说的。
就是第一题一直只过60%。给我恶心吐了
第四题手写个堆,话说过了就行谁要自己写堆呀。

第一题求税率
第二题求拦截水最大
第三题求字符串S能拆除几个T
第四题排序

第二题:
class Solution {
public:

    int maxArea(vector<int>& height) {
        // write code here
        int ans=0;
        int n = height.size();
        for(int i =0;i<n;i++){
            for(int j =i+1;j<n;j++){
                ans = max(ans,min(height[i],height[j])*(j-i));
            }
        }
        return ans;
    }
};

第三题
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 输入s为一个长度为n的字符串,t是一个长度为m的字符串, 1<= s.length <= 10**9,  1 <= t.length <= 10**9。
     * @param s string字符串 
     * @param t string字符串 
     * @return int整型
     */
    int MatchString(string s, string t) {
        // write code here
        unordered_map<char, int>mpS;
        unordered_map<char, int>mpT;
        unordered_map<char, int>mp;
        
        for(int i = 0;t[i];i++){
            mpT[t[i]] ++;
        }
        for(int i =0;s[i];i++) mpS[s[i]]++;
        int ans = 10000000;
        for(int i = 0;t[i];i++){
            mp[t[i]]++;
            if(mp[t[i]] == 1){
                ans = min(ans,mpS[t[i]] / mpT[t[i]]);
            }
        }
        return ans;
        
    }
};
4
class Solution {
public:

    vector<int> heap_top_k(vector<int>& nums, int k) {
        // write code here
        vector<int>ans;
        sort(nums.begin(),nums.end());
        for(int i =nums.size()-1;i > nums.size() - k-1;i--) ans.push_back(nums[i]);
        return ans;
    }
};
第一题恶心心,只能过60% ,我直接改了一个多小时,改上头了
double nowNum = 0.0;
class Solution {
public:
    string toString(double num){
        string ans = "";
        num *= 100;
        num += 0.5;
        long long p = (long long)num;
        long long x = p;
        int cnt = 0;
        while(p){
            ans.push_back(p % 10 + '0');
            cnt++;
            if(cnt == 2) ans.push_back('.');
            p /= 10;
        }
        if(x <= 9){
            ans.push_back('0');
            ans.push_back('.');
            ans.push_back('0');
            
        }
        else if(x <= 99){
            ans.push_back('0');
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }

    double getNum(double needCost){
        double ans = 0.0;
        if(nowNum + needCost > 960000.0){
            double p = min(needCost,(nowNum + needCost - 960000));
            ans += p * 0.45;
            needCost -= p;
        }
        if(needCost < 0.01) return ans;
        if(nowNum + needCost > 660000.0){
            double p = min(needCost,(nowNum + needCost - 660000));
            ans += p * 0.35;
            needCost -= p;
        }
        if(needCost < 0.01) return ans;
        if(nowNum + needCost > 420000.0){
            double p = min(needCost,(nowNum + needCost - 420000));
            ans += p * 0.30;
            needCost -= p;
        }
       if(needCost < 0.01) return ans;
        if(nowNum + needCost > 300000){
            double p = min(needCost,(nowNum + needCost - 300000));
            ans += p * 0.25;
            needCost -= p;
        }
        if(needCost < 0.01) return ans;
        if(nowNum + needCost > 144000.0){
            double p = min( (nowNum + needCost - 144000),needCost );
            ans += p * 0.20;
            needCost -= p;
        }
        if(needCost <= 0.01) return ans;
        if(nowNum + needCost > 36000){
            double p = min ( needCost, (nowNum + needCost - 36000) );
            ans += p * 0.1;
            needCost -= p;
        }
        if(needCost <= 0.01) return ans;
        if(nowNum + needCost > 0){
            ans += ( needCost) * 0.03;
        }
        
        return ans;
    }
    vector<string> calcTax(vector<double>& income) {

        nowNum = 0.0;
        vector<string>ans;
        
        for(int i=0; i < income.size(); i++){
            if(income[i] <= 5000){
                ans.push_back("0.00");
            }
            else {
                double realNum = getNum( income[i] - 5000 );
                string x = toString(realNum);
                if(x == "" || realNum < 0.01) x = "0.00";
                nowNum += (income[i] - 5000);
                ans.push_back(x);
            }
        }
        return ans;
    }
};




#博乐科技##笔经#
全部评论
我是约的下周四
1 回复
分享
发布于 2022-03-25 00:29
这是A卷还是B卷啊
点赞 回复
分享
发布于 2022-03-20 12:29
滴滴
校招火热招聘中
官网直投
我今天才做的 早知道看下了 说不定能到面试 哈哈
点赞 回复
分享
发布于 2022-03-20 19:50
我第一题题都没读懂😅
点赞 回复
分享
发布于 2022-03-21 01:05
第一题我也是60%,但后来想了想,确实是考虑不全,下个月的税率并非只有不变和变成下一个税率,而是当前税率以后的税率都有可能。但是做题做迷糊被绕住了😥
点赞 回复
分享
发布于 2022-03-21 15:29
有没有老哥解释一下第一题啥意思
点赞 回复
分享
发布于 2022-03-27 23:18
有没有第一题a了的老哥讲讲怎么做的😭我也是60%,感觉是遇到极端数据了,比如月收入50w那种
点赞 回复
分享
发布于 2022-03-29 19:51
小兄弟,你约面试了么
点赞 回复
分享
发布于 2022-04-03 17:08
刚做完笔试,第一题我题目都读不懂,看不明白实例是怎么算的...
点赞 回复
分享
发布于 2022-04-10 00:05
第一题还需要退税,过了80%
点赞 回复
分享
发布于 2022-04-14 15:42

相关推荐

1 35 评论
分享
牛客网
牛客企业服务