LeetCode 第 21 场双周赛(779/1913,前40.7%)

文章目录

    • 1. 比赛结果
    • 2. 题目
      • LeetCode 5336. 上升下降字符串 easy
      • LeetCode 5337. 每个元音包含偶数次的最长子字符串 medium
      • LeetCode 5338. 二叉树中的最长交错路径 medium
      • LeetCode 5339. 二叉搜索子树的最大键值和 hard

1. 比赛结果

只做出来了第1题,第3题有一个例子超时,没解决

全国排名:779 / 1913,40.7%;全球排名:2027 / 4729,42.8%

2. 题目

LeetCode 5336. 上升下降字符串 easy

题目链接

给你一个字符串 s ,请你根据下面的算法重新构造字符串:

  1. 从 s 中选出 最小 的字符,将它 接在 结果字符串的后面
  2. 从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。
  3. 重复步骤 2 ,直到你没法从 s 中选择字符。
  4. 从 s 中选出 最大 的字符,将它 接在 结果字符串的后面
  5. 从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。
  6. 重复步骤 5 ,直到你没法从 s 中选择字符。
  7. 重复步骤 1 到 6 ,直到 s 中所有字符都已经被选过。

在任何一步中,如果最小或者最大字符不止一个 ,你可以选择其中任意一个,并将其添加到结果字符串。

请你返回将 s 中字符重新排序后的 结果字符串 。

示例 1:
输入:s = "aaaabbbbcccc"
输出:"abccbaabccba"
解释:第一轮的步骤 123 后,结果字符串为 result = "abc"
第一轮的步骤 456 后,结果字符串为 result = "abccba"
第一轮结束,现在 s = "aabbcc" ,我们再次回到步骤 1
第二轮的步骤 123 后,结果字符串为 result = "abccbaabc"
第二轮的步骤 456 后,结果字符串为 result = "abccbaabccba"示例 2:
输入:s = "rat"
输出:"art"
解释:单词 "rat" 在上述算法重排序以后变成 "art"示例 3:
输入:s = "leetcode"
输出:"cdelotee"示例 4:
输入:s = "ggggggg"
输出:"ggggggg"示例 5:
输入:s = "spo"
输出:"ops"提示:
1 <= s.length <= 500
s 只包含小写英文字母。

解答:

  • 一次遍历,对字符进行计数
  • 正反遍历计数数组,直到计数全部为0
class Solution {
public:string sortString(string s) {int m[26] = {0}, sum = 0, i;for(auto& ch : s){m[ch-'a']++;sum++;}string ans;while(sum){for(i = 0; i < 26; i++){if(m[i]){ans.push_back(i+'a');sum--;m[i]--;}   }for(i = 25; i >= 0; i--){if(m[i]){ans.push_back(i+'a');sum--;m[i]--;}   }}return ans;}
};

执行用时:12 ms
内存消耗:9.9 MB

LeetCode 5337. 每个元音包含偶数次的最长子字符串 medium

题目链接

给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。

示例 1:
输入:s = "eleetminicoworoep"
输出:13
解释:最长子字符串是 "leetminicowor" ,它包含 e,i,o 各 2 个,以及 0 个 a,u 。示例 2:
输入:s = "leetcodeisgreat"
输出:5
解释:最长子字符串是 "leetc" ,其中包含 2 个 e 。示例 3:
输入:s = "bcbcbc"
输出:6
解释:这个示例中,字符串 "bcbcbc" 本身就是最长的,因为所有的元音 a,e,i,o,u 都出现了 0 次。提示:
1 <= s.length <= 5 x 10^5
s 只包含小写英文字母。

解题:

  • 哈希map 记录所有元音字符的前缀异或值,及当前位置
  • 当哈希表中可以查到该异或值时,说明当前位置与查到的位置之间的子串是满足题意的

举个例子:

"qacaba"

初始:没有元音,前缀异或值0,位置记为 -1;m[0] = -1
i = 0,没有元音,前缀异或值0,0 存在map,len = 0-(-1) = 1,最长“q”
i = 1,出现元音a,前缀异或值a,位置 1;m[a] = 1
i = 2,没有元音,前缀异或值a,len = 2-m[a] = 1
i = 3,出现元音a,前缀异或值a^a=0,len = 3-m[0] = 3-(-1) = 4,最长“qaca”
i = 4,没有元音,前缀异或值0,len = 4-m[0] = 4-(-1)=5,最长“qacab”
i = 5,出现元音a,前缀异或值0^a=a,len = 5-m[a] = 5-1 = 4,最长“caba”

所以最长的是5个字符qacab

class Solution {
public:int findTheLongestSubstring(string s) {unordered_map<int,int> m;	// 前缀异或值,对应的位置int XOR = 0, i, maxlen = 0;m[0] = -1;	//没有元音,位置为-1,方便计算个数for(i = 0; i < s.size(); i++) {if(s[i]!='a' && s[i]!='e' && s[i]!='i' && s[i]!='o' && s[i]!='u'){if(m.count(XOR))maxlen = max(maxlen, i-m[XOR]);}else //s[i] 是元音{XOR ^= s[i];//元音异或值if(m.count(XOR))maxlen = max(maxlen, i-m[XOR]);elsem[XOR] = i;}}return maxlen;}
};

or

class Solution {
public:int findTheLongestSubstring(string s) {unordered_map<int,int> m;	// 前缀异或值,对应的位置int XOR = 0, i, maxlen = 0;m[0] = -1;	//没有元音,位置为-1,方便计算个数for(i = 0; i < s.size(); i++) {if(s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u')XOR ^= s[i];//元音异或值	if(m.count(XOR))maxlen = max(maxlen, i-m[XOR]);elsem[XOR] = i;}return maxlen;}
};

执行用时:184 ms
内存消耗:18.7 MB

LeetCode 5338. 二叉树中的最长交错路径 medium

题目链接

给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:

  • 选择二叉树中 任意 节点和一个方向(左或者右)。
  • 如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。
  • 改变前进方向:左变右或者右变左。
  • 重复第二步和第三步,直到你在树中无法继续移动。

交错路径的长度定义为:访问过的节点数目 - 1(单个节点的路径长度为 0 )。

请你返回给定树中最长 交错路径 的长度。

在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-zigzag-path-in-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


解题:

52 / 58 个通过测试用例
超时例子,代码如下:

class Solution {int ans = 0;
public:int longestZigZag(TreeNode* root) {if(!root)return 0;dfs(root->left,0,0);dfs(root->right,0,1);longestZigZag(root->left);longestZigZag(root->right);return ans;}void dfs(TreeNode* root, int count, bool dir){if(!root){ans = max(ans,count);return;}if(dir==true)dfs(root->left,count+1,!dir);elsedfs(root->right,count+1,!dir);}
};
  • 原因:主函数遍历了每个点,重复走了很多次
  • 改:在调用的时候,遇到没变方向的,直接count计数置为 0 ,继续向下走。
class Solution {int ans = 0;
public:int longestZigZag(TreeNode* root) {if(!root)return 0;dfs(root->left,0,0);dfs(root->right,0,1);return ans;}void dfs(TreeNode* root, int count, bool dir){if(!root) {ans = max(ans,count);return;}if(dir)//前一个是右节点{dfs(root->left,count+1,0);dfs(root->right,0,1);}else//前一个是左节点{dfs(root->left,0,0);dfs(root->right,count+1,1);}}
};

在这里插入图片描述

LeetCode 5339. 二叉搜索子树的最大键值和 hard

题目链接

给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树最大键值和

二叉搜索树的定义如下:

  • 任意节点的左子树中的键值都 小于 此节点的键值。
  • 任意节点的右子树中的键值都 大于 此节点的键值。
  • 任意节点的左子树和右子树都是二叉搜索树。

在这里插入图片描述


解题:

参考大佬的解法:

  • 自底向上,返回4个变量的 vector
  • 【0】是不是搜索树【1】左子树最小值【2】右子树最大值【3】子树val 的 sum
  • 空节点 返回 {true,INT_MAX,INT_MIN,0}
  • 获得左右子树的状态后,开始判断:
  • 都必须是搜索树,左子树最大值小于 root,右子树最小值 大于 root,全部满足,才是搜索树
class Solution {int maxSum = 0;
public:int maxSumBST(TreeNode* root) {dfs(root);return maxSum;}vector<int> dfs(TreeNode* root) {if(!root)return {true,INT_MAX,INT_MIN,0};//子树是不是二叉搜索树 vec[0]//子树的最小值 vec[1]//子树的最大值 vec[2]//子树的sum值 vec[3]auto Lstate = dfs(root->left);auto Rstate = dfs(root->right);if(!Lstate[0] || !Rstate[0] || Lstate[2] >= root->val || Rstate[1] <= root->val)return {false,INT_MAX,INT_MIN,0};//后三个参数随意//是二叉搜索树int Lmin = root->left ? Lstate[1] : root->val;int Rmax = root->right ? Rstate[2] : root->val;int cursum = root->val+Lstate[3]+Rstate[3];maxSum = max(maxSum, cursum);return {true,Lmin,Rmax,cursum};}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法工程师的三观测试

文 | 小戏编 | 小轶如果我在谷歌输入“How to improve my machine learning models”&#xff0c;我会得到形形色色花样繁多的提升模型性能的方法。从调参到特征工程&#xff0c;从集成模型到数据增强&#xff0c;琳琅满目&#xff0c;不胜枚举。可是如果我在这个问题上加一点限…

领域驱动设计在互联网业务开发中的实践

至少30年以前&#xff0c;一些软件设计人员就已经意识到领域建模和设计的重要性&#xff0c;并形成一种思潮&#xff0c;Eric Evans将其定义为领域驱动设计&#xff08;Domain-Driven Design&#xff0c;简称DDD&#xff09;。在互联网开发“小步快跑&#xff0c;迭代试错”的大…

LeetCode 1377. T 秒后青蛙的位置(BFS)

1. 题目 给你一棵由 n 个顶点组成的无向树&#xff0c;顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下&#xff1a; 在一秒内&#xff0c;青蛙从它所在的当前顶点跳到另一个 未访问 过的顶点&#xff08;如果它们直接相连&#xff09;。青蛙无法跳回已经访问过的顶点。…

已删除

7.12更新:部分基金赎回的钱已经到账小金库了&#xff0c;今日从小金库提现时又提示银行卡已删除&#xff0c;不过这次可以点击重新绑定&#xff0c;重新绑定时会报错“绑定的卡与原卡一致”&#xff0c;流程没法走完。但这时候再退回去却发现“银行卡已删除”的提示没有了。于是…

即时配送的ETA问题之亿级样本特征构造实践

ETA&#xff08;Estimated time of Arrival&#xff0c;预计送达时间&#xff09;是外卖配送场景中最重要的变量之一&#xff08;如图1&#xff09;。 我们对ETA预估的准确度和合理度会对上亿外卖用户的订单体验造成深远影响&#xff0c;这关系到用户的后续行为和留存&#xff…

LeetCode 1376. 通知所有员工所需的时间(DFS)

1. 题目 公司里有 n 名员工&#xff0c;每个员工的 ID 都是独一无二的&#xff0c;编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。 在 manager 数组中&#xff0c;每个员工都有一个直属负责人&#xff0c;其中 manager[i] 是第 i 名员工的直属负责人。对于总负责人…

华为天才少年稚晖君做了一把模块化机械键盘,引起极客圈地震,网友:这才是真正的客制化...

作者 | 王玥、李梅&#xff0c;陈彩娴&#xff08;编辑&#xff09;来源 | AI科技评论他来了他来了&#xff0c;一人顶一个团队的稚晖君又一次带着一项硬核&#xff08;虽然他强调是“软核”&#xff09;黑科技来了&#xff01;稚晖君&#xff0c;真名彭志辉&#xff0c;三次元…

iPhone X 刘海打理指北

iPhone X 刘海机于9月13日发布&#xff0c;给科技小春晚带来一波高潮。作为开发人员却多出来一份忧虑&#xff0c;iPhone X 怎么适配&#xff1f;我们 App 的脑袋会不会也长一刘海出来&#xff1f;Tabbar 会不会被圆角&#xff1f;先来看一下美团 App 的表现&#xff1a; 图 1.…

大厂们终于无法忍受“加一秒”了,微软谷歌Meta等公司提议废除闰秒

文 | 萧箫 发自 凹非寺源 | 量子位 , 公众号 QbitAI大厂们再也无法忍受闰秒带来的一堆bug了。现在&#xff0c;谷歌Meta微软亚马逊等一众科技巨头发起了一项倡议&#xff1a;废除闰秒&#xff01;闰秒这玩意&#xff0c;说白了就是通过给“世界标准时间”加_&#xff08;或减&a…

LeetCode 1374. 生成每种字符都是奇数个的字符串

1. 题目 给你一个整数 n&#xff0c;请你返回一个含 n 个字符的字符串&#xff0c;其中每种字符在该字符串中都恰好出现 奇数次 。 返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串&#xff0c;则返回其中任意一个即可。 示例 1&#xff1a; 输入&…

Redux从设计到源码

本文主要讲述三方面内容&#xff1a; Redux 背后的设计思想源码分析以及自定义中间件开发中的最佳实践在讲设计思想前&#xff0c;先简单讲下Redux是什么&#xff1f;我们为什么要用Redux&#xff1f; Redux是什么&#xff1f; Redux是JavaScript状态容器&#xff0c;能提供可预…

LeetCode 1375. 灯泡开关 III

1. 题目 房间中有 n 枚灯泡&#xff0c;编号从 1 到 n&#xff0c;自左向右排成一排。最初&#xff0c;所有的灯都是关着的。 在 k 时刻&#xff08; k 的取值范围是 0 到 n - 1&#xff09;&#xff0c;我们打开 light[k] 这个灯。 灯的颜色要想 变成蓝色 就必须同时满足下…

MIT指出公开预训练模型不能乱用

文 | 林锐众所周知&#xff0c;用 Imagenet 预训练模型做 backbone&#xff0c;再接个下游任务的头去微调&#xff0c;是个简单有效的迁移学习方法。基本上&#xff0c;炼丹师用这种方法就能成功获得一个优秀的模型&#xff08;水一个实验室的项目&#xff09;。但是近些年一些…

从0到1:构建强大且易用的规则引擎

引言 2016年07月恰逢美团点评的业务进入“下半场”&#xff0c;需要我们在各个环节优化体验、提升效率、降低成本。技术团队需要怎么做来适应这个变化&#xff1f;这个问题直接影响着之后的工作思路。 美团外卖的CRM业务步入成熟期&#xff0c;规则类需求几乎撑起了这个业务所有…

LintCode 563. 背包问题 V(DP)

1. 题目 给出 n 个物品, 以及一个数组, nums[i] 代表第i个物品的大小, 保证大小均为正数, 正整数 target 表示背包的大小, 找到能填满背包的方案数。 每一个物品只能使用一次 样例 给出候选物品集合 [1,2,3,3,7] 以及 target 7 结果的集合为: [7] [1,3,3] 返回 22. 解题 dp[…

汽车博主因眼睛小被辅助驾驶误判为开车睡觉!何小鹏亲自回应 蔚来已成立专门研究小组...

源 | 每日经济新闻近日&#xff0c;一位汽车博主表示&#xff0c;他在驾驶小鹏汽车&#xff0c;使用小鹏辅助驾驶功能的时候&#xff0c;因为自己的眼睛比较小&#xff0c;所以被系统判定为“开车睡觉”&#xff0c;从而被扣除了智驾分。据了解&#xff0c;“智驾分”是小鹏汽车…

投资127亿!深圳,再添一所985

源 | 青塔综合转自 | 募格学术据深圳卫视近日消息&#xff0c;中山大学深圳校区多栋建筑将在暑假交付。报道称&#xff0c;中山大学深圳校区主楼正在进行工程最后收尾工作&#xff0c;预计本月底就能竣工验收&#xff0c;确保秋季新学期开始前投入使用。校区总建筑面积约127万平…

Android OOM案例分析

在Android&#xff08;Java&#xff09;开发中&#xff0c;基本都会遇到java.lang.OutOfMemoryError&#xff08;本文简称OOM&#xff09;&#xff0c;这种错误解决起来相对于一般的Exception或者Error都要难一些&#xff0c;主要是由于错误产生的root cause不是很显而易见。由…

NAACL最佳方法论文:课本上的A*搜索算法可以提升文本生成效果!

文 | Yimin_饭煲相信大多数学习过人工智能课程的读者&#xff0c;当听到算法的时候&#xff0c;都会有一种既熟悉又陌生的感觉。说算法熟悉&#xff0c;是因为一听到这个算法&#xff0c;就想起那本厚厚的《人工智能——一种现代的方法》&#xff0c;想起这个算法似乎是人工智能…

LeetCode 6. Z 字形变换(找规律)

1. 题目 将一个给定字符串根据给定的行数&#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a; L C I R E T O E S I I G E D H N之后&#xff0c;你的输出需要从左往右逐行…