LeeCode第291场单周赛回顾总结

一、6047.移除指定数字得到最大结果

1、原题链接:

2、解题思路:

(第一题纯属搞心态,乱我道心)

第一题其实只要想明白,思路还是比较简单的,具体看代码体现。

3、参考代码:

class Solution {
public:
    string removeDigit(string number, char digit) {
        string res, tmp;
        int n = number.size();
        for(int i = 0; i < n; i ++)
            if(digit == number[i]){
                tmp = number;
                //删除第i个元素
                tmp.erase(tmp.begin()+i);
                //如果res为空或者tmp大于res则res = tmp
                if(res.empty() || tmp > res) res = tmp;
            }
        return res;
    }
};

二、2260.必须拿起的最小连续卡牌数

1、原题链接:

2、解题思路:

这一题说来有点波折,受第一题没做出的影响这题有点开摆,直接一通暴力加疯狂提交,然后WA了五次。。。

但是经过代码的优化后,得到了如下代码还是成功拿下了这一题。

具体思路:

用map来边存边比较,先存储不存在的元素,然后若出现与之前相同的元素,就做一个比较,较小的用res来保存,这样我们就只需要遍历一遍即可,不会出现两层for循环然后报TIME LIMITED。

3、参考代码:

class Solution {
public:
    int minimumCardPickup(vector<int>& cards) {
        int n = cards.size();
        int res = INT_MAX;
        unordered_map<int,int> mp;
        for(int i = 0; i < n; i ++){
            if(mp[cards[i]]){
                int tmp = i - mp[cards[i]] + 1 + 1;
                res = min(res,tmp);
             }
            mp[cards[i]] = i+1;  
        }
        if(res > 100000) return -1;
        return res;
    }
};

三、2261.含最大K个可整除元素的子数组

1、原题链接:

2、解题思路:

我们可以枚举所有的子数组,从前往后遍历时用2个指针记录当前满足能被p整除的个数,当个数超过k时将左边的指针往前走一步,右边的指针重新初始化**。

这里为了去重方便,用一个string的set来保存,拼接时候用一个字符分割就行了。

3、参考代码:

class Solution {
public:
    int countDistinct(vector<int>& nums, int k, int p) {
        int n = nums.size();
        set<string> s;
        for (int i = 0; i < n; ++i) {
            int cnt = 0;
            string str = "";
            for (int j = i; j < n; ++j) {
                if (nums[j] % p == 0) {
                    ++cnt;
                }
                if (cnt <= k) {
                    //分隔符
                    str += ",";
                    str += to_string(nums[j]);
                    s.insert(str);
                } else {
                    break;
                }
            }
        }
        return s.size();
    }
};
经验分享 程序员 微信小程序 职场和发展