力扣题目训练(14)

2024年2月7日力扣题目训练

2024年2月7日第十四天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。惰性太强现在才完成,不过之后我会认真完成的。

501. 二叉搜索树中的众数

链接: 众数
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题就是遍历,然后记录每个数出现的次数,出现最多就是众数,所以利用中序遍历和哈希表。
代码:

class Solution {
   
private:
    unordered_map<int,int> res;
    int maxans = 0;
public:
    void inorder(TreeNode* root){
   
        if(root == NULL) return;
        inorder(root->left);
        res[root->val]++;
        maxans = max(res[root->val],maxans);
        inorder(root->right);
    }
    vector<int> findMode(TreeNode* root) {
   
        vector<int> ans;
        if(root == NULL) return ans;
        inorder(root);
        for (auto it = res.begin(); it != res.end();it++) {
   
            if(it->second == maxans){
   
                ans.push_back(it->first);
            }
        }  
        return ans;
    }
};

504. 七进制数

链接: 七进制数
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题就是一个进制问题,利用/和%就可得到。
代码:

class Solution {
   
public:
    string convertToBase7(int num) {
   
        if(num==0)return "0";
        int flag = 0;
        if(num < 0) flag = 1;
        num = abs(num);
        string ans;
        while(num){
   
            ans += num % 7 + '0';
            num /= 7;
        }
        if(flag == 1) ans+='-';
        reverse(ans.begin(),ans.end());
        return ans;
    }
};

506. 相对名次

链接: 相对名次
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题就是排序,然后找到对应位置就可,sort为从小到大排序,而本题需要从大到小排序,所以我们可以加负号进行排序。
代码:

class Solution {
   
public:
    vector<string> findRelativeRanks(vector<int>& score) {
   
        vector<string> ans; 
        if(score.size() == 0) return ans;
        vector<int> temp(score.size());
        for(int i =0; i < score.size(); i++)  temp[i] = -score[i];
        sort(temp.begin(),temp.end());
        for(int i = 0; i < score.size(); i++){
   
            int idx = find(temp.begin(),temp.end(),-score[i])-temp.begin();
            if(idx == 0){
   
                ans.push_back("Gold Medal");
            }
            else if(idx == 1){
   
                ans.push_back("Silver Medal");
            }
            else if(idx == 2){
   
                ans.push_back("Bronze Medal");
            }
            else{
   
                ans.push_back(to_string(idx+1));
            }
        }
        return ans;
    }
};

201. 数字范围按位与

链接: 按位与
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题我知道是利用公共前缀,但是不知道怎么用。官方是通过观察得到的。
按位与运算的性质。对于一系列的位,只要有一个零值的位,那么这一系列位的按位与运算结果都将为零。
我们可以发现,对所有数字执行按位与运算的结果是所有对应二进制字符串的公共前缀再用零补上后面的剩余位。
代码:

class Solution {
   
public:
    int rangeBitwiseAnd(int left, int right) {
   
        int shift = 0;
        while(left < right){
   
            left >>= 1;
            right >>= 1;
            shift++;
        }
        return left << shift;
    }
};

209. 长度最小的子数组

链接: 子数组
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题我的思路就是暴力法不错过任何一个,但是时间超过了。官方的方法还有前缀和+二分查找以及滑动窗口这两种方法来解决,这里给出滑动窗口的答案。
代码:

class Solution {
   
public:
    int minSubArrayLen(int target, vector<int>& nums) {
   
        int n = nums.size();
        if(n == 0) return 0;
        int ans = INT_MAX;
        int start = 0,end = 0;
        int sum = 0;
        while(end < n){
   
            sum += nums[end];
            while(sum >= target){
   
                ans = min(ans, end-start+1);
                sum -= nums[start];
                start++;
            }
            end++;
        }
        return ans == INT_MAX?0:ans;
    }
};

87. 扰乱字符串

链接: 字符串
难度: 困难
题目:
题目描述

运行示例:
运行示例

思路:
这道题我是没有什么思路,官方采用动态规划。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码:

class Solution {
   
private:
    int memo[30][30][31];
    string s1,s2;
public:
    bool checkIfSimilar(int i1, int i2, int length){
   
        unordered_map<int,int> freq;
        for (int i = i1; i < i1 + length; ++i) {
   
            ++freq[s1[i]];
        }
        for (int i = i2; i < i2 + length; ++i) {
   
            --freq[s2[i]];
        }
        if (any_of(freq.begin(), freq.end(), [](const auto& entry) {
   return entry.second != 0;})) {
   
            return false;
        }
        return true;
    }
    bool dfs(int i1, int i2, int length) {
   
        if (memo[i1][i2][length]) {
   
            return memo[i1][i2][length] == 1;
        }
        if (s1.substr(i1, length) == s2.substr(i2, length)) {
   
            memo[i1][i2][length] = 1;
            return true;
        }
        if (!checkIfSimilar(i1, i2, length)) {
   
            memo[i1][i2][length] = -1;
            return false;
        }
        for (int i = 1; i < length; ++i) {
   
            if (dfs(i1, i2, i) && dfs(i1 + i, i2 + i, length - i)) {
   
                memo[i1][i2][length] = 1;
                return true;
            }
            if (dfs(i1, i2 + length - i, i) && dfs(i1 + i, i2, length - i)) {
   
                memo[i1][i2][length] = 1;
                return true;
            }
        }

        memo[i1][i2][length] = -1;
        return false;
    }
    bool isScramble(string s1, string s2) {
   
        memset(memo, 0, sizeof(memo));
        this->s1 = s1;
        this->s2 = s2;
        return dfs(0, 0, s1.size());
    }
};

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 09:46:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 09:46:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 09:46:03       87 阅读
  4. Python语言-面向对象

    2024-02-19 09:46:03       96 阅读

热门阅读

  1. ansible

    ansible

    2024-02-19 09:46:03      47 阅读
  2. 低代码开发:助力企业迈向智能化未来

    2024-02-19 09:46:03       60 阅读
  3. C++的虚函数和纯虚函数的功能是什么

    2024-02-19 09:46:03       54 阅读
  4. docker修改工作目录

    2024-02-19 09:46:03       57 阅读
  5. MVCC简记

    2024-02-19 09:46:03       58 阅读
  6. 【nginx实践连载-4】彻底卸载Nginx(Ubuntu)

    2024-02-19 09:46:03       55 阅读
  7. Python内置函数05——filter

    2024-02-19 09:46:03       46 阅读
  8. pytorch导出为onnx,使用onnxruntime进行推理

    2024-02-19 09:46:03       41 阅读
  9. UDP协议

    UDP协议

    2024-02-19 09:46:03      51 阅读
  10. [Optimization] Codes Answer to online quiz 1

    2024-02-19 09:46:03       50 阅读