![](https://img-blog.csdnimg.cn/9e80e01f4a6d48baa48c8a5f4c808544.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode每日一题
文章平均质量分 66
leetcode每日一题
庄小焱
我是庄小焱,某大厂Java高级工程师、PMP项目管理专家、系统架构设计师(高级)、CSDN博文专家。 博主在支付领域,金融领域、订单履约领域不断学习,同时在博客中分享自己学习知识和相关技术, 欢迎大家和我交流学习,欢迎大家关注我的博客。
展开
-
Leetcode(每日一题)——831. 隐藏个人信息
我们首先判断s是邮箱还是电话号码。显然,如果s中有字符‘@’,它是邮箱,否则是电话号码。原创 2023-04-02 08:40:21 · 275 阅读 · 1 评论 -
Leetcode(每日一题)——2367. 算术三元组的数目
如果 j原创 2023-03-31 07:47:48 · 338 阅读 · 0 评论 -
Leetcode(每日一题)——1092. 最短公共超序列
为了描述方便,下文把str1记作s,str2str2 记作t。对于 s=abac和 t=cab,考虑从后往前构造答案(最短公共超序列)。想一想,答案的最后一个字母是什么?要么是s 的最后一个字母c,要么是t的最后一个字母b。其它字母是没有意义的,假设答案为 cabaca,最后一个字母是a,你完全可以把a去掉,不会影响s 和t作为答案的子序列。无论如何,我们都得到了一个规模更小的子问题,即构造s的某个前缀与t的某个前缀的最短公共超序列。由于子问题与原问题是相似的,可以采用递归解决。原创 2023-03-28 08:35:37 · 302 阅读 · 1 评论 -
Leetcode(每日一题)——1630. 等差子数组
要想判断某个子数组是否可以重新排列成等差数列,最简单的方法是建立一个等长度的临时数组,将子数组进行拷贝并排序。对于排完序后的子数组,我们只需要进行一次遍历,判断相邻两个元素的差值是否保持不变,就能判断出它是否为等差数列。原创 2023-03-23 21:34:01 · 141 阅读 · 0 评论 -
Leetcode(每日一题)——1626. 无矛盾的最佳球队
首先我们将所有队员按照分数升序进行排序,分数相同时,则按照年龄升序进行排序,我们用数组 people[n][2] 来表示排序后的 n名球员信息,其中 people[i][0],people[i][1]分别为排序后第i名球员的分数和年龄。球队的得分是球队中所有球员分数的总和,现在我们需要求所有可能的无矛盾的球队的最高分数。上文讨论的是建立在i>0的前提上的,我们还需要考虑动态规划的边界条件,当i=0时,只有一名球员people[0],此时该球员单独组成一只队伍有:dp[0]=people[0][0]。原创 2023-03-22 11:03:20 · 204 阅读 · 0 评论 -
Leetcode(每日一题)——2469. 温度转换
Java有两种浮点数据类型,第一种float使用32 bit表示,对应单精度浮点数,运行速度相比double更快,占内存更小,但是当数值非常大或者非常小的时候会变得不精确。精度要求不高的时候可以使用float类型。基本类型double占8个字节,二进制位数有64位,取值范围为[-1.79769313486231570e+308,-4.94065645841246544e-324] ∪ [4.94065645841246544e-324,1.79769313486231570e+308]。原创 2023-03-21 17:39:21 · 202 阅读 · 0 评论 -
Leetcode(每日一题)——1616. 分割两个字符串得到回文串
这个字符串的起始位置是由a组成的,末尾位置是由b构成的。要想构成回文,起始的部分和末尾的部分必须是倒序相等的,这个可以用双指针来逐位判断。当遇到不相等的情况时,则说明遇到了分割点,分割的位置可能是左侧的指针,也可能是右侧的指针。如果分割点是左侧的指针,则需要b在双指针之间的字符串构成回文;如果分割点是右侧的指针,则需要a 在双指针之间的字符串构成回文。这二者满足其一即可。记字符串的长度为n,分割的下标为k,即下标k之前的字符构成前缀,下标k和之后的字符构成后缀,前缀长度为k,后缀长度为n−k,0≤k≤n。原创 2023-03-18 11:17:17 · 189 阅读 · 0 评论 -
Leetcode(每日一题)——2389. 和有限的最长子序列
给你一个长度为n的整数数组nums ,和一个长度为m的整数数组queries。返回一个长度为m的数组answer ,其中answer[i] 是 nums中元素之和小于等于queries[i] 的子序列的最大长度。子序列是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。由于选取的元素没有连续的要求,因此可以对数组进行排序。原创 2023-03-17 08:52:07 · 285 阅读 · 0 评论 -
Leetcode(每日一题)——1487. 保证文件名唯一
如果name在哈希表中,那么说明文件系统已经存在名为name的文件夹,我们在哈希表找到 name的下一后缀序号k,逐一尝试直到添加后缀k的新文件名不存在于哈希表中,然后创建该文件夹。需要注意的是,创建该文件夹后,有两个文件名的下一后缀序号需要修改,首先文件名name的下一后缀序号为k+1,其次,文件名name添加后缀 kk 的新文件名的下一后缀序号为1。如果name不在哈希表中,那么说明文件系统不存在名为name的文件夹,我们直接创建该文件夹,并且记录对应文件夹的下一后缀序号为1。空间复杂度:O(m)。原创 2023-03-03 13:47:08 · 103 阅读 · 0 评论 -
Leetcode(每日一题)——2373. 矩阵中的局部最大值
设grid的大小n×n,那么我们申请一个大小为(n−2)×(n−2)的矩阵 resres 用来存放答案。我们遍历 grid中每个3×3子矩阵的左上角,然后统计当前子矩阵的最大值放入res中。具体做法是,我们顺序遍历 i (0≤i原创 2023-03-01 07:24:08 · 170 阅读 · 0 评论 -
Leetcode(每日一题)——1144. 递减元素使数组呈锯齿状
即为了使某一个奇数下标位置i满足要求的最少操作次数 Ci=max(p[i]−q(i)+1,0) 其中 q(i)表示数组 p中位置i相邻元素的最小值,因为若我们对某个偶数下标的元素进行了操作,则该元素相邻的奇数下标元素所需要的操作次数只增不减,但是总的操作次数一定增加了,所以最优解中一定不会存在对偶数下标操作的情况。那么我们对 nums中每一个奇数位置i的ci求和即为此时求每一个偶数索引对应的元素都大于其相邻的元素的「锯齿数组」的最少操作的次数。原创 2023-02-28 22:05:29 · 166 阅读 · 0 评论 -
Leetcode(每日一题)——1754. 构造字典序最大的合并字符串
假设 word1[i]=word2[j],此时两个字符串分别从 i,j开始还有 l 个字符相等,则此时word1[i+k]=word2[j+k],k∈[0,l−1]第 l+1 个字符时二者不相等,即满足 word1[i+l]≠word2[j+l],我们可以假设 word1[i+l]原创 2022-12-24 12:59:22 · 778 阅读 · 1 评论 -
Leetcode(每日一题)——2335. 装满杯子需要的最短总时长
【代码】Leetcode(每日一题)——2335. 装满杯子需要的最短总时长。原创 2023-02-11 10:47:39 · 77 阅读 · 0 评论 -
Leetcode(每日一题)——1138. 字母板上的路径
假设两个字符 a,b在画板中的位置分别为(xa,ya),(xb,yb),其中xa,xb表示字符 a,b的行坐标,ya,yb表示字符 a,b的列坐标。假设当前处在字符 a处,需要移动到字符 b,此时只需先上下移动 ∣xa−xb∣个位置,再左右移动 ∣ya−yb∣个位置,再执行一次添加操作即可完成字符 b的添加。由于字符 ‘z’所在的行只有一列,从其他字符移动到字符 ‘z’时,必须先移动到字符 ‘u’,再向下移动到 ‘z’,最后一步操作一定是下移。空间复杂度:O(1)。原创 2023-02-12 10:15:30 · 92 阅读 · 0 评论 -
Leetcode(每日一题)——1234. 替换子串得到平衡字符串
因为我们在搜索过程中要时刻判断「不替换的内容」中四个字符的出现次数是否小于等于n/4,因此我们必须先遍历一遍整个字符串,得到字符的总共出现次数【初始化断「不替换的内容」中四个字符的出现次数,表示初始子串为空】,然后在滑动窗口的移动过程中,动态的增加或减少对应字符出现的次数,来维护「不替换的内容」中四个字符的出现次数。【子串不合法,就说明「不替换的内容」中存在至少一个字符的出现次数大于n/4,我们就要通过加长子串,从而缩短「不替换的内容」,期望多的字符被加入子串,使得「不替换的内容」可能满足】。原创 2023-02-13 22:16:48 · 310 阅读 · 0 评论 -
Leetcode(每日一题)——1124. 表现良好的最长时间段
具体的,我们遍历 i (0≤i≤r−1),如果 stk为空或者栈顶元素大于s[i],则将s[i]入栈。求解l时,我们不断的弹出栈顶元素,直到栈顶元素是最后一个小于 s[r]的元素,此时栈顶元素所在位置即为我们要求的l。至此,我们只需求解最长的一段区间 [l,r] 使得 s[r]−s[l]>0,其中0≤l≤r≤n。设 n 为 hours的长度,从小到大遍历 i (1≤i≤n),若 hours[i−1]>8,则令 s[i]=s[i−1]+1,否则令 s[i]=s[i−1]−1。否则,继续考虑下一个 r。原创 2023-02-14 08:46:12 · 329 阅读 · 0 评论 -
Leetcode(每日一题)——1250. 检查「好数组」
【代码】Leetcode(每日一题)——1250. 检查「好数组」原创 2023-02-15 09:20:37 · 118 阅读 · 0 评论 -
Leetcode(每日一题)——2341. 数组能形成多少数对
另外Hashmap的思路:遍历一次数组,用一个哈希表保存元素个数的奇偶性,偶数为false,奇数则为true。每遇到一个元素,则将奇偶性取反,若取反完后为偶数个,则表明在上次偶数个之后又遇到了两个该元素,可以形成一个数对。最后返回一个数组,第一个元素是数对数,第二个元素是数组长度减去数对数的两倍。思路:遍历一遍数组,将数组存储在hasmap中,然后在遍历一遍Hashmap的元素。分别设置两个计数器,记录该元素对2除的结果和对2取余数的结果。最后返回这个两个数据就是结果。原创 2023-02-16 09:15:51 · 96 阅读 · 0 评论 -
Leetcode(每日一题)——1139. 最大的以 1 为边界的正方形
如下图所示,我们以橙色的位置1为正方形的右下角,分别沿着左边和上边找出他们连续1的个数,最小的作为正方形的边长。如果我们能计算出所有dp(i,j) 的值,那么其中的最大值即为矩阵中只包含1的正方形的边长最大值,其平方即为最大正方形的面积。如果该位置的值是 1,则 dp(i,j)的值由其上方、左方和左上方的三个相邻位置的dp值决定。确定正方形的左上角后,根据左上角所在的行和列计算可能的最大正方形的边长(正方形的范围不能超出矩阵的行数和列数),在该边长范围内寻找只包含 1 的最大正方形;原创 2023-02-17 08:21:22 · 387 阅读 · 0 评论 -
Leetcode(每日一题)——1237. 找出给定方程的正整数解
由于 (x,y)的初始值分别为 (0,n−1),因此y 最多能被减少n次,x最多能被增加m 次,总搜索次数为 m+n。当我们固定 x=x0时,函数 g(y)=f(x0,y)是单调递增函数,可以通过二分查找来判断是否存在 y=y0,使 g(y0)=f(x0,y0)=z成立。根据题目给出的x和y的取值范围,枚举所有的 x,y数对,保存满足f(x,y)=z的数对,最后返回结果。时间复杂度:O(m+n),其中m是x的取值数目,n是y的取值数目。时间复杂度:O(mn),其中m是x的取值数目,n是y的取值数目。原创 2023-02-18 10:02:57 · 230 阅读 · 0 评论 -
Leetcode(每日一题)——1792. 最大平均通过率
【代码】Leetcode(每日一题)——1792. 最大平均通过率。原创 2023-02-19 10:18:05 · 79 阅读 · 0 评论 -
Leetcode(每日一题)——2347. 最好的扑克手牌
我们只需要给出我们手中的5张扑克能够组成最好手牌类型。因为扑克牌的大小和花色是独立的。首先将我ranks和suits分别放入哈希表中计数,然后在判断我们当前手牌的类型。我们结果只可能是的四种情况。原创 2023-02-20 09:19:11 · 419 阅读 · 0 评论 -
Leetcode(每日一题)——1140. 石子游戏 II
两人交替拿石子,为了在 i 尽量小的情况下,使 M 尽量大,那么每次都拿满M堆,最后有(2+4+8+⋯+M)+2M原创 2023-02-22 09:16:28 · 356 阅读 · 0 评论 -
Leetcode(每日一题)——2357. 使数组中所有元素都等于零
需要注意的是,由于目标是将数组中的所有元素减少0,如果数组中的一个元素已经是0则不需要对该元素执行操作,因此只需要考虑数组中的不同非零元素的个数。由于每次操作都将数组中的所有非零元素减少一个相同的值,因此数组中的相等元素减少到0 的操作数相等,数组中的不相等元素减少到0的操作数不相等。又由于使用贪心策略操作时,每次操作都会将数组中的最小非零元素减少到0,因此最少操作数等于数组中的不同非零元素的个数。,则哈希集合的大小等于数组中的不同非零元素的个数,即为最少操作数。使用哈希集合存储数组中的所有。原创 2023-02-24 09:28:18 · 76 阅读 · 0 评论