首页 > 其他分享 >2024-03-15 leetcode写题记录

2024-03-15 leetcode写题记录

时间:2024-03-15 20:45:35浏览次数:20  
标签:03 15 int ml ans height 2024 mr dp

目录

2024-03-15 leetcode写题记录

32. 最长有效括号

题目链接

32. 最长有效括号

题意

给你一个只包含$ '\((\)' 和 '\()\)' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

解法

动态规划

用\(dp[i]\)代表从第\(i\)个字符串开始,最多往前多少个字符是合法的。那么当我们遍历\(s\)时,第\(i\)个字符只需要跟第\(i-dp[i-1]-1\)(这里为了方便,记为\(l\))处的字符比较。

当\(l<=0\)时,代表没有字符能够跟第\(i\)个字符配对了,显然\(dp[i]=0\);当第\(i\)个字符为'\((\)'时,由于第\(i\)个字符无法配对(右边没有字符了),所以\(dp[i]=0\);当第\(l\)个字符为'\()\)'时,由于从第\(l+1\)到第\(i-1\)的字符都已经合法了,而第\(i\)个字符无法与第\(l\)个字符配对,所以也有\(dp[i]=0\)。

只有当第\(l\)个字符为'\((\)'且第\(i\)个字符为'\()\)'时,才能完成状态转移,方程为\(dp[i]=dp[i-1]+2+dp[l-1]\)。

从所有\(dp[i]\)里找到最大的那个,就是答案。

class Solution {
public:
    int longestValidParentheses(string s) {
        int n = s.size(), ans = 0;
        vector<int> dp(n + 1, 0);
        for (int i = 1; i <= n; ++i) {
            int l = i - dp[i - 1] - 1;
            if (l <= 0 || s[i - 1] == '(' || s[l - 1] == ')')
                continue;
            dp[i] = dp[i - 1] + 2 + dp[l - 1];
            ans = max(ans, dp[i]);
        }
        return ans;
    }
};

42. 接雨水

题目链接

42. 接雨水

题意

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

image

解法

动态规划

时间复杂度\(O(n)\),空间复杂度\(O(n)\)。

class Solution {
public:
    int trap(vector<int>& height) {
        int n = height.size();
        vector<int> l(n + 2, 0), r(n + 2, 0);
        for (int i = 1; i <= n; ++i) 
            l[i] = max(l[i - 1], height[i - 1]);
        for (int i = n; i >= 1; --i) 
            r[i] = max(r[i + 1], height[i - 1]);
        int ans = 0;
        for (int i = 1; i <= n; ++i) {
            int lr = min(l[i - 1], r[i + 1]);
            if (lr <= height[i - 1])
                continue;
            ans += lr - height[i - 1];
        }
        return ans;
    }
};

双指针

用\(l\)和\(r\)遍历,若\(l\)左边的最大值已经小于\(r\)右边的最大值,那么\(l\)左边的最大值一定小于\(l+1\)右边的最大值,所以就可以把第\(l+1\)个元素的贡献加上,然后\(l\)右移\(1\)位,反之同理。

时间复杂度\(O(n)\),空间复杂度\(O(1)\)。

class Solution {
public:
    int trap(vector<int>& height) {
        int n = height.size(), l = 0, r = n - 1, ans = 0, ml = 0, mr = 0;
        while(l < r) {
            ml = max(ml, height[l]);
            mr = max(mr, height[r]);
            if (ml < mr) {
                if (ml > height[l + 1])
                    ans += ml - height[l + 1];
                l++;
            } else {
                if (mr > height[r - 1])
                    ans += mr - height[r - 1];
                r--;
            }
        }
        return ans;
    }
};

标签:03,15,int,ml,ans,height,2024,mr,dp
From: https://www.cnblogs.com/FlyingLight/p/18075990

相关文章

  • 日记 2024.3.15:2024 年 syzx 春季训练 1
    日记2024.3.15:2024年syzx春季训练1A找出在\(1,2\)周围一圈的点,挑出最远点\(u,v\)(找不到说明\(d_{1,2}=1\)),判一下\(d_{u,v}\)与\(d_{u,2}\)的关系以区分\(\pm1\)。这样比较好看。B普通冒泡\(n(n-1)/2\)次,这题\(n^2\),说明每做一次操作可以浪费一次操作。......
  • 3月15号-应用层与TCP
    昨天的TCP过于简化,TCP有着多种应用,控制数据流出速率保证网络速率平衡(这跟慢启动方法有关),支持传输和重传,建立到两个计算机之间的直接联系。应用层的话则是更加日常的网页,应用程序,是针对用户最前线的地方。本身在作出网络请求时需要遵守协议(约定的数据传输规则),如http协议,请求和回复......
  • 一体机 配置记录2024
    用于数据采集  鲁大师详细报表软件版本鲁大师6.1024.3970.311模块版本5.1024.1705.130检测时间2024-03-1518:48:12官方网站http://www.ludashi.com概览电脑型号X64兼容台式电脑操作系统Windows10专业版64位(Version21H2/DirectX12)处理器英特尔第三代酷......
  • 谢老师2024春 - Day2:期望DP
    Day2:期望DP​​A-CF148DBagofmice设\(dp_{i,j}\)表示还剩下\(i\)只白鼠,\(j\)只黑鼠A的胜率。大家都没有拿到白鼠,那么B赢,\(dp_{0,0}=0\)​。没有白鼠了,那么B赢,\(dp_{0,j}=0\)。全是白鼠了,那么A赢(A先抓),\(dp_{i,0}=1\)​。然后转移,有这几种情况:第一次就......
  • 从 VNCTF2024 的一道题学习QEMU Escape
    说在前面本文的草稿是边打边学边写出来的,文章思路会与一个“刚打完用户态pwn题就去打QEMUEscape”的人的思路相似,在分析结束以后我又在部分比较模糊的地方加入了一些补充,因此阅读起来可能会相对轻松。(当然也不排除这是我自以为是)题目github仓库[1]题目分析流程[1-1]......
  • 2024-03-15
    2024-03-15美好的一天昨天剩下的题一个字符串重新标号之后可以形成回文串当且仅当每个字母在这个串中出现的次数要么全是偶数要么只有一个奇数我们只关心出现次数的奇偶性,可以用异或来记录用一个长度为26的01串st来记录,第i位表示('a'+i)这个字母出现次数的奇偶......
  • 20240315打卡
    第三周第一天第二天第三天第四天第五天第六天第七天所花时间3h5h0h1h0h代码量(行)2742560640博客量(篇)11111知识点了解完成AndroidStudio中原生数据库SQlite简单的CRUD本地数据库连接到远程数据库海底谭练习python的Pyautogui,自动......
  • 2024-03-14 leetcode写题记录
    目录2024-03-14leetcode写题记录829.连续整数求和题目链接题意解法2024-03-14leetcode写题记录829.连续整数求和题目链接829.连续整数求和题意给定一个正整数\(n\),返回连续正整数满足所有数字之和为\(n\)的组数。示例1:输入:n=5输出:2解释:5=2+3,共有两......
  • 【小白刷leetcode】第15题
    【小白刷leetcode】第15题动手刷leetcode,正在准备蓝桥,但是本人算法能力一直是硬伤。。。所以做得一直很痛苦。但是不熟练的事情像练吉他一样,就需要慢速,多练。题目描述看这个题目,说实在看的不是很懂。索性我们直接来看输入输出。观察输入输出我们可以知道:输入是一个数......
  • 2024前端 JS面试题
    目录1,JS数据类型2,JS两种数据类型1,基本数据类型1,基本数据类型的值不可变2,基本数据类型不可以添加属性和方法:3,基本数据类型的赋值是简单的赋值4,基本数据类型的比较是值的比较:5,基本数据类型的值存放在栈内存中6,基本数据类型详解1,undefined2,Null3,string4,Number5,Bo......