力扣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 复制代码

--

相关推荐
BestOrNothing_201523 分钟前
【C++基础】Day 4:关键字之 new、malloc、constexpr、const、extern及static
c++·八股文·static·extern·new与malloc·constexpr与const
高洁0130 分钟前
具身智能-普通LLM智能体与具身智能:从语言理解到自主行动 (2)
深度学习·算法·aigc·transformer·知识图谱
无敌最俊朗@31 分钟前
如何把一个压缩的视频文件,解压成一张张原始图片-decode_video.c
c++
fpcc32 分钟前
C++编程实践——手动实现std::visit
c++
重启的码农34 分钟前
enet源码解析(4)多通道机制 (Channels)
c++·网络协议
重启的码农39 分钟前
enet源码解析(3)数据包 (ENetPacket)
c++·网络协议
l1t41 分钟前
使用DuckDB SQL求解Advent of Code 2024第9题 磁盘碎片整理
数据库·sql·算法·duckdb·advent of code
小南家的青蛙1 小时前
LeetCode面试题 04.06 后继者
算法·leetcode·职场和发展
IT·小灰灰1 小时前
基于Python的机器学习/数据分析环境搭建完全指南
开发语言·人工智能·python·算法·机器学习·数据分析
wefg12 小时前
【C++】智能指针
开发语言·c++·算法