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

--

相关推荐
艾莉丝努力练剑7 分钟前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
_殊途2 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
还债大湿兄2 小时前
《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
c++·qt·mfc
珊瑚里的鱼5 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
AI+程序员在路上5 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt
Risehuxyc5 小时前
C++卸载了会影响电脑正常使用吗?解析C++运行库的作用与卸载后果
开发语言·c++
秋说6 小时前
【PTA数据结构 | C语言版】顺序队列的3个操作
c语言·数据结构·算法
lifallen6 小时前
Kafka 时间轮深度解析:如何O(1)处理定时任务
java·数据结构·分布式·后端·算法·kafka
liupenglove7 小时前
自动驾驶数据仓库:时间片合并算法。
大数据·数据仓库·算法·elasticsearch·自动驾驶
python_tty8 小时前
排序算法(二):插入排序
算法·排序算法