力扣118双周赛

第 118 场双周赛

文章目录

查找包含给定字符的单词

模拟

cpp 复制代码
class Solution {
public:
    vector<int> findWordsContaining(vector<string>& words, char x) {
        vector<int>res;
        for(int j = 0 ; j < words.size() ; j ++){
            bool f = false;
            string t = words[j];
            for(int i = 0 ; i < t.size() ; i ++){
                if(t[i] == x)f = true;
            }
            if(f)res.push_back(j);
        }
        return res;
    }
};

最大化网格图中正方形空洞的面积

长和宽分别找最长的连续部分,取最小相乘

cpp 复制代码
class Solution {
public:
    int maximizeSquareHoleArea(int n, int m, vector<int>& hBars, vector<int>& vBars) {
        ranges::sort(hBars);
        ranges::sort(vBars);
        int res = 0 , a = 0 , b = 0 , c = 0;
        int last = -1;
        for(int i = 0 ; i < hBars.size() ; i ++){
            if(last == -1){last = hBars[i] ; a = max(a , 1); c = 1;continue;}
            if(hBars[i] - last == 1){
                c ++;
            }else{
                a = max(a , c);
                c = 1;
            }
            last = hBars[i];
            
        }
        a = max(a , c);
        last = -1;
        for(int i = 0 ; i < vBars.size() ; i ++){
            if(last == -1){last = vBars[i] ; b = max(b , 1); c = 1;continue;}
            if(vBars[i] - last == 1){
                c ++;
            }else{
                b = max(b , c);
                c = 1;
            }
            last = vBars[i];          
        }
        b = max(b , c);
        res = (min(a,b) + 1) * (min(a,b) + 1);
        return res;
    }
};

购买水果需要的最少金币数

用dp[i][0]表示买前i个水果且不买第i个水果的最少金币数

用dp[i][1]表示买前i个水果且买第i个水果的最少金币数

cpp 复制代码
class Solution {
public:
    int minimumCoins(vector<int>& prices) {
        int n = prices.size();
        int dp[1005][2];
        //初始化
        for(int i = 0 ; i <= n ; i ++){
            dp[i][0] = dp[i][1] = 999999;
        }
        dp[1][1] = prices[0];
        //dp
        for(int i = 1 ; i < n ; i ++){
            //买第i个
            dp[i + 1][1] = min(dp[i][0] ,dp[i][1]) + prices[i];
            //不买第i个
            for(int j = i; j + j >= i  + 1; j --){
                dp[i + 1][0] = min(dp[i + 1][0] , dp[j][1]);
            }
        }
        return min(dp[n][0],dp[n][1]);
    }
};

找到最大非递减数组的长度

后面补题

cpp 复制代码

--

相关推荐
2501_933513047 分钟前
关于一种计数的讨论、ARC212C Solution
算法
Wu_Dylan8 分钟前
智能体系列(二):规划(Planning):从 CoT、ToT 到动态采样与搜索
人工智能·算法
散峰而望14 分钟前
【算法竞赛】栈和 stack
开发语言·数据结构·c++·算法·leetcode·github·推荐算法
知乎的哥廷根数学学派15 分钟前
基于多尺度注意力机制融合连续小波变换与原型网络的滚动轴承小样本故障诊断方法(Pytorch)
网络·人工智能·pytorch·python·深度学习·算法·机器学习
蚊子码农20 分钟前
算法题解记录-208实现Trie前缀树
运维·服务器·算法
2301_8002561121 分钟前
【人工智能引论期末复习】第3章 搜索求解2 - 对抗搜索
人工智能·算法·深度优先
程序猿阿伟29 分钟前
《量子算法开发实战手册:Python全栈能力的落地指南》
python·算法·量子计算
不爱吃糖的程序媛37 分钟前
OpenHarmony 通用C/C++三方库 标准化鸿蒙化适配
c语言·c++·harmonyos
fqbqrr41 分钟前
2601C++,导出控制
c++
陌路201 小时前
日志系统7--异步日志的实现
c++