LeetCode 第 25 场双周赛(718/1832,前39.2%)

文章目录

    • 1. 比赛结果
    • 2. 题目
      • 1. LeetCode 5384. 拥有最多糖果的孩子 easy
      • 2. LeetCode 5385. 改变一个整数能得到的最大差值 medium
      • 3. LeetCode 5386. 检查一个字符串是否可以打破另一个字符串 medium
      • 4. LeetCode 5387. 每个人戴不同帽子的方案数 hard

1. 比赛结果

做出来了 1、2、3 题,1个小时做出来3题(拼手速),第2题有点卡壳,第4题动态规划很难,不会,继续加油!冲啊!

全国排名:718 / 1832,39.2%;全球排名:2951 / 7699,38.3%
在这里插入图片描述
在这里插入图片描述

2. 题目

1. LeetCode 5384. 拥有最多糖果的孩子 easy

题目链接
给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。

对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。

示例 1:
输入:candies = [2,3,5,1,3], extraCandies = 3
输出:[true,true,true,false,true] 
解释:
孩子 12 个糖果,如果他得到所有额外的糖果(3个),那么他总共有 5 个糖果,他将成为拥有最多糖果的孩子。
孩子 23 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
孩子 35 个糖果,他已经是拥有最多糖果的孩子。
孩子 41 个糖果,即使他得到所有额外的糖果,他也只有 4 个糖果,无法成为拥有糖果最多的孩子。
孩子 53 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。示例 2:
输入:candies = [4,2,1,1,2], extraCandies = 1
输出:[true,false,false,false,false] 
解释:只有 1 个额外糖果,所以不管额外糖果给谁,只有孩子 1 可以成为拥有糖果最多的孩子。示例 3:
输入:candies = [12,1,12], extraCandies = 10
输出:[true,false,true]提示:
2 <= candies.length <= 100
1 <= candies[i] <= 100
1 <= extraCandies <= 50

解答:
比赛解:没想那么多,拼手速呢,数据规模很小,直接暴力

class Solution {
public:vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {int i, j, k = 0, n = candies.size();bool flag = true;vector<bool> ans(n,false);for(i = 0; i < n; ++i){flag = true;for(j = 0; j < n; ++j){if(candies[i]+extraCandies < candies[j]){flag = false;break;}}ans[k++] = flag;}return ans;}
};

赛后优化解:

  • 先把最大的找到,在一次遍历
class Solution {
public:vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {int i, j=0, maxCandy = *max_element(candies.begin(),candies.end()), n = candies.size();vector<bool> ans(n,false);for(i = 0; i < n; ++i){ans[j++] = (candies[i]+extraCandies >= maxCandy);}return ans;}
};

8 ms 9 MB

2. LeetCode 5385. 改变一个整数能得到的最大差值 medium

题目链接
给你一个整数 num 。你可以对它进行如下步骤恰好 两次 :

  • 选择一个数字 x (0 <= x <= 9).
  • 选择另一个数字 y (0 <= y <= 9) 。数字 y 可以等于 x 。
  • 将 num 中所有出现 x 的数位都用 y 替换。
  • 得到的新的整数 不能 有前导 0 ,得到的新整数也 不能 是 0 。

令两次对 num 的操作得到的结果分别为 a 和 b 。

请你返回 a 和 b 的 最大差值

示例 1:
输入:num = 555
输出:888
解释:第一次选择 x = 5 且 y = 9 ,并把得到的新数字保存在 a 中。
第二次选择 x = 5 且 y = 1 ,并把得到的新数字保存在 b 中。
现在,我们有 a = 999 和 b = 111 ,最大差值为 888示例 2:
输入:num = 9
输出:8
解释:第一次选择 x = 9 且 y = 9 ,并把得到的新数字保存在 a 中。
第二次选择 x = 9 且 y = 1 ,并把得到的新数字保存在 b 中。
现在,我们有 a = 9 和 b = 1 ,最大差值为 8示例 3:
输入:num = 123456
输出:820000示例 4:
输入:num = 10000
输出:80000示例 5:
输入:num = 9288
输出:8700提示:
1 <= num <= 10^8

解题:

  • 大数,找到第一个不为9的,将所有的替换掉
  • 小数,找到第一个不为1也不为0的,如果这个数它是首位就用1替换,不是就用0替换
class Solution {
public:int maxDiff(int num) {vector<int> big;int n, i = 0, first;while(num){big.insert(big.begin(),num%10);num /= 10;}vector<int> small(big);n = big.size();while(i < n){if(big[i]==9)i++;elsebreak;}if(i != n){first = big[i];for( ; i < n; ++i)if(big[i]==first)big[i] = 9;//换成9}i = 0;while(i < n) {if(small[i]<2)i++;elsebreak;}if(i < n){first = small[i];if(first == small[0])//等于首位{for(i = 0; i < n; ++i)if(small[i]==first)small[i] = 1;//都变成1}else//不等于首位{for(i = 0; i < n; ++i)if(small[i]==first)small[i] = 0;//都变成0}}int a =0, b = 0;for(int i = 0; i < big.size(); ++i)a = a*10+big[i];for(int i = 0; i < big.size(); ++i)b = b*10+small[i];return a-b;}
};

3. LeetCode 5386. 检查一个字符串是否可以打破另一个字符串 medium

题目链接
给你两个字符串 s1 和 s2 ,它们长度相等,请你检查是否存在一个 s1 的排列可以打破 s2 的一个排列,或者是否存在一个 s2 的排列可以打破 s1 的一个排列。

字符串 x 可以打破字符串 y (两者长度都为 n )需满足对于所有 i(在 0 到 n - 1 之间)都有 x[i] >= y[i](字典序意义下的顺序)。

示例 1:
输入:s1 = "abc", s2 = "xya"
输出:true
解释:"ayx" 是 s2="xya" 的一个排列,
"abc" 是字符串 s1="abc" 的一个排列,且 "ayx" 可以打破 "abc" 。示例 2:
输入:s1 = "abe", s2 = "acd"
输出:false 
解释:s1="abe" 的所有排列包括:"abe""aeb""bae""bea""eab""eba" ,
s2="acd" 的所有排列包括:"acd""adc""cad""cda""dac""dca"。
然而没有任何 s1 的排列可以打破 s2 的排列。也没有 s2 的排列能打破 s1 的排列。示例 3:
输入:s1 = "leetcodee", s2 = "interview"
输出:true提示:
s1.length == n
s2.length == n
1 <= n <= 10^5
所有字符串都只包含小写英文字母。

解题:

  • 对s1,s2排序,依次进行对比就行,最多两次遍历
class Solution {
public:bool checkIfCanBreak(string s1, string s2) {sort(s1.begin(),s1.end());sort(s2.begin(),s2.end());bool flag = true;for(int i = 0; i < s1.size(); ++i){flag &= (s1[i]>=s2[i]);if(!flag)break;}if(flag)return flag;flag = true;for(int i = 0; i < s1.size(); ++i){flag &= (s1[i]<=s2[i]);if(!flag)break;}return flag;}
};

460 ms 11.8 MB

4. LeetCode 5387. 每个人戴不同帽子的方案数 hard

题目链接
总共有 n 个人和 40 种不同的帽子,帽子编号从 1 到 40 。

给你一个整数列表的列表 hats ,其中 hats[i] 是第 i 个人所有喜欢帽子的列表。

请你给每个人安排一顶他喜欢的帽子,确保每个人戴的帽子跟别人都不一样,并返回方案数

由于答案可能很大,请返回它对 10^9 + 7 取余后的结果。

示例 1:
输入:hats = [[3,4],[4,5],[5]]
输出:1
解释:给定条件下只有一种方法选择帽子。
第一个人选择帽子 3,第二个人选择帽子 4,最后一个人选择帽子 5。示例 2:
输入:hats = [[3,5,1],[3,5]]
输出:4
解释:总共有 4 种安排帽子的方法:
(3,5)(5,3)(1,3)(1,5)示例 3:
输入:hats = [[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
输出:24
解释:每个人都可以从编号为 14 的帽子中选。
(1,2,3,4) 4 个帽子的排列方案数为 24 。示例 4:
输入:hats = [[1,2,3],[2,3,5,6],[1,3,7,9],[1,8,9],[2,5,7]]
输出:111提示:
n == hats.length
1 <= n <= 10
1 <= hats[i].length <= 40
1 <= hats[i][j] <= 40
hats[i] 包含一个数字互不相同的整数列表。

解题:

  • 参考lc大佬的思路
class Solution {
public:int numberWays(vector<vector<int>>& hats) {int i, state, mod = 1e9+7, n = hats.size();//n个人int N = (1<<n);//n个人带帽子或不戴帽子有2^n种可能(这个维度比较小n最大10)vector<vector<long long>> dp(41,vector<long long>(N,0));//dp[i][j]表示戴上第i个帽子后,人们戴帽子状态为 j(拆成二进制位0没戴,1戴了)的戴帽子方案数//初始化dp[0][0] = 1;//都没戴帽子1种情况vector<set<int>> hat_p(41);//某个帽子可以戴的人for(i = 0; i < n; ++i)for(int hat : hats[i])hat_p[hat].insert(i);for(i = 1; i <= 40; ++i)//遍历每个帽子{dp[i] = dp[i-1];//第i个帽子不戴//以下处理第i个帽子要戴的情况(前提那个人i-1时候没有戴帽子)for(int p : hat_p[i])//该帽子可以戴的人p{for(state = 0; state < N; ++state)//遍历所有可能的状态{if(((((state-(1<<p)))>>p)&1)==0){   //到达state状态之前的状态是state-(1<<p),该位为0,p号人没有戴帽子dp[i][state] += dp[i-1][state-(1<<p)];}	//所有i-1没戴帽子的,满足条件的,戴上i号帽子,加总}}}return dp[40][N-1]%mod;//N-1表示二进制111...11,都戴了帽子}
};

或者这么写也是对的

if(((state>>p)&1)==0)
{   //上一个状态是state,状态的p位为0,没戴帽子,到达的状态该位 | 1 dp[i][state|(1<<p)] += dp[i-1][state];
}

20 ms 13.6 MB

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

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

相关文章

target java_java元注解 @Target注解用法

Target&#xff1a;Target说明了Annotation所修饰的对象范围&#xff1a;Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了tar…

LeetCode 第 187 场周赛(1336/3107,前43.0%)

文章目录1. 比赛结果2. 题目1. LeetCode 5400. 旅行终点站 easy2. LeetCode 5401. 是否所有 1 都至少相隔 k 个元素 medium3. LeetCode 5402. 绝对差不超过限制的最长连续子数组 medium4. LeetCode 5403. 有序矩阵中的第 k 个最小数组和 hard1. 比赛结果 15分钟做出来了 1、2 …

场景编辑器竣工!

今天接着做XML解析&#xff0c;对那个遍历的结构作了些修改&#xff0c;插入了几个函数。 终于&#xff0c;新的场景编辑器竣工了&#xff01; 一个比较复杂的场景了&#xff0c;用3dsMax制作材质&#xff0c;安排物件位置和所用材质 导出到DirectX中&#xff0c;效果感觉比Max…

将MathType公式转换为Blog可用的LaTeX公式(MD编辑器)

会LaTex语法的同学敲起来还是会快一些的。 符号参考&#xff1a; LaTeX 各种命令&#xff0c;符号Latex所有常用数学符号整理 不会的同学&#xff0c;可以按照以下方式操作&#xff1a; 在MathType内先敲好公式 可以手敲&#xff0c;也可以手写&#xff08;手写调用windows的…

JQuery + Json 练习随笔

早就听说JQuery Ajax的方便快捷以及Json优秀的数据交换&#xff0c;今天有空尝试了一下&#xff0c;菜鸟了一番。对初步的使用也算是有个比较抽象的理解吧。记录之备忘&#xff01; json简介&#xff1a; JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人…

LeetCode 313. 超级丑数(动态规划)

1. 题目 编写一段程序来查找第 n 个超级丑数。 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。 示例: 输入: n 12, primes [2,7,13,19] 输出: 32 解释: 给定长度为 4 的质数列表 primes [2,7,13,19]&#xff0c; 前 12 个超级丑数序列为&#xf…

Visual Studio 2010 旗舰版免序列号安装体验

Visual Studio 2010 E文版已经发布多时&#xff0c;由于工作原因没有及早的下载体验&#xff0c;直到前几天园子里的朋友放出了下载简体中文的种子 ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/于是决定下来…

潜在狄利克雷分配(Latent Dirichlet Allocation,LDA)

文章目录1. 狄利克雷分布2. 潜在狄利克雷分配模型3. 学习推理4. sklearn.decomposition.LatentDirichletAllocation潜在狄利克雷分配&#xff08;latent Dirichlet allocation&#xff0c;LDA&#xff09;&#xff0c;作为基于 贝叶斯学习的话题模型&#xff0c;是潜在语义分析…

LeetCode 983. 最低票价(动态规划)

1. 题目 在一个火车旅行很受欢迎的国度&#xff0c;你提前一年计划了一些火车旅行。 在接下来的一年里&#xff0c;你要旅行的日子将以一个名为 days 的数组给出。 每一项是一个从 1 到 365 的整数。 火车票有三种不同的销售方式&#xff1a; 一张为期一天的通行证售价为 co…

LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)

1. 题目 这里有一个非负整数数组 arr&#xff0c;你最开始位于该数组的起始下标 start 处。 当你位于下标 i 处时&#xff0c;你可以跳到 i arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意&#xff0c;不管是什么情况下&#xff…

mysql错误日志为aborting_MySQL 错误日志(Error Log)

同大多数关系型数据库一样&#xff0c;日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件。通常包括错误日志文件&#xff0c;二进制日志&#xff0c;通用日志&#xff0c;慢查询日志&#xff0c;等等。这些日志能够帮助我们定位mysqld内部发生的事件&#xff0…

LeetCode 529. 扫雷游戏(广度优先搜索BFS/深度优先搜索DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 让我们一起来玩扫雷游戏&#xff01; 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷&#xff0c; ‘E’ 代表一个未挖出的空方块&#xff0c; ‘B’ 代表没有相邻&#xff08;上&#xff0c;下&#xff0c;左…

Flash 与数学:圆的切线(3)

在上面几节当中&#xff0c;已经了解过计算圆上任意一点的切线的方法&#xff0c;我们首先知道使用导数几何意义在哪里&#xff1f;在我们高中数学和大学的数学当中&#xff0c;说明了。导数的几何意义函数yf&#xff08;x&#xff09;在点x0处导数为f(x0)在几何上表示曲线yf&a…

LeetCode 1110. 删点成林(二叉树递归)

1. 题目 给出二叉树的根节点 root&#xff0c;树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现&#xff0c;我们就把该节点从树上删去&#xff0c;最后得到一个森林&#xff08;一些不相交的树构成的集合&#xff09;。 返回森林中的每棵树。你可以按任意顺序…

创建链表

代码#include <iostream>usingnamespacestd;structstudent //定义结构体{ intdata; student *next;};//创建链表student *CreateList(){ student *headNULL; student *pnewstudent; cin>>p->data; student *endp; while(p->data!0…

LeetCode 1286. 字母组合迭代器(回溯/位运算)

文章目录1. 题目2. 解题2.1 回溯2.2 位运算1. 题目 请你设计一个迭代器类&#xff0c;包括以下内容&#xff1a; 一个构造函数&#xff0c;输入参数包括&#xff1a;一个 有序且字符唯一 的字符串 characters&#xff08;该字符串只包含小写英文字母&#xff09;和一个数字 c…

基于Java+SpringMvc+Vue求职招聘系统详细设计实现

基于JavaSpringMvcVue求职招聘系统详细设计实现 &#x1f345; 作者主页 专业程序开发 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringMvcVue求职招聘系统详细设计实现一、前言介…

无监督学习方法总结

文章目录1. 无监督学习方法的关系和特点1.1 各种方法之间的关系1.2 无监督学习方法1.3 基础机器学习方法1. 无监督学习方法的关系和特点 八种常用的统计机器学习方法&#xff1a; 聚类方法&#xff08;层次聚类、k均值聚类&#xff09;奇异值分解&#xff08;SVD&#xff09;…

java从控制台输入数组_Java将控制台输入的一行整数转成整型数组

思路&#xff1a;将一行数据按字符串的形式读取进来。首先判断输入的字符串是不是空&#xff0c;为空的话&#xff0c;则不作任何操做。其次&#xff0c;将字符串按照指定方式切分为字符串数组&#xff0c;此处是按照空格切分&#xff0c;由于输入是按空格区分的。最后&#xf…

在Silverlight中使用Socket进行通信(1)Socket请求-回复方式的简易数据交换

很久之前用过Socket&#xff0c;由于近期项目需要用socket传输视频流&#xff0c;早上花了半小时回顾了一下。 Socket类简要介绍 socket下提供的主要类有四个&#xff0c;分别是socket,tcpclient,tcplistener,udpclient&#xff0c;他们的作用如下&#xff1a; Socket 含有大量…