leetcode 315周赛 解题报告

简介: leetcode 315周赛 解题报告

6204. 与对应负数同时存在的最大正整数


给你一个 不包含 任何零的整数数组 nums ,找出自身与对应的负数都在数组中存在的最大正整数 k

返回正整数 k ,如果不存在这样的整数,返回 -1

思路:

两层循环嵌套

1. class Solution:
2. def findMaxK(self, nums: List[int]) -> int:
3.         ans=[]
4. for i in range(len(nums)):
5. if nums[i]<0:
6. continue
7. for j in range(len(nums)):
8. if nums[j]==-nums[i]:
9.                     ans.append(nums[i])
10. if ans==[]:
11. return -1
12. return max(ans)

6205. 反转之后不同整数的数目


给你一个由 整数组成的数组 nums

你必须取出数组中的每个整数,反转其中每个数位,并将反转后得到的数字添加到数组的末尾。这一操作只针对 nums 中原有的整数执行。

返回结果数组中 不同 整数的数目。

思路:

模拟+去重

1. class Solution:
2. def countDistinctIntegers(self, nums: List[int]) -> int:
3.         temp=nums
4. for i in range(len(nums)):
5. 
6.             s=str(nums[i])[::-1]
7. 
8.             k=-1
9. for j in range(len(s)):
10. if s[j]=='0':
11. continue
12. else:
13.                     k=j
14. break
15. 
16.             temp.append(int(s[k:]))
17. 
18.         a=set(temp)
19.         ans=len(a)
20. 
21. return ans

6219. 反转之后的数字和


给你一个 非负 整数 num 。如果存在某个 非负 整数 k 满足 k + reverse(k) = num  ,则返回 true ;否则,返回 false

reverse(k) 表示 k 反转每个数位后得到的数字。

思路:

模拟


1. class Solution:
2. def sumOfNumberAndReverse(self, num: int) -> bool:
3. if num==0:
4. return True
5. for i in range(1,num):
6.             s=str(i)[::-1]
7.             k=-1
8. for j in range(len(s)):
9. if s[j]=='0':
10. continue
11. else:
12.                     k=j
13. break
14. 
15. if int(s[k:])+i==num:
16. return True
17. return False

 

6207. 统计定界子数组的数目


给你一个整数数组 nums 和两个整数 minK 以及 maxK

nums 的定界子数组是满足下述条件的一个子数组:

  • 子数组中的 最小值 等于 minK
  • 子数组中的 最大值 等于 maxK

返回定界子数组的数目。

子数组是数组中的一个连续部分。


思路:

首先考虑一个简单的情况,nums 的所有元素都在[minK,maxK] 范围内。

在这种情况下,相当于要统计同时包含 minK 和 {maxK}maxK 的子数组的个数。

我们可以枚举子数组的右端点。遍历 nums,记录 minK 上一次出现的位置 minI 和 maxK 上一次出现的位置 maxI,当遍历到 nums[i] 时,如果minK 和 \maxK 之前出现过,则左端点 ≤min(minI,maxI) 的子数组都是合法的,合法子数组的个数为 min(minI,maxI)+1。

同时我们要记录min(minI,maxI)左边最后出现的不在[minK,maxK] 范围之外的nums[i] 的下标I,因为在最外层遍历的过程中,遍历到一个在[minK,maxK] 范围内的节点时,因为题目要求找出满足要求的子数组,所以我们的结果ans要新增min(minI,maxI)−I

如果 min(minI,maxI)−iI<0,则表示在 I右侧 minK 和 maxK 没有同时出现,此时合法子数组的个数为 0。

 

1. class Solution:
2. def countSubarrays(self, nums: List[int], minK: int, maxK: int) -> int:
3.         min_I,max_I,I=-1,-1,-1
4.         ans=0
5. for i in range(len(nums)):
6. if nums[i]==minK: min_I=i
7. if nums[i]==maxK: max_I=i
8. # if nums[i]>nums[max_I] or nums[i]<nums[min_I]:
9. #     I=i
10. if not minK <= nums[i] <= maxK: 
11.                 I = i 
12. 
13.             ans+=max(0,min(min_I,max_I)-I)
14. return ans
目录
相关文章
|
9月前
|
Go
golang力扣leetcode 第 291 场周赛
golang力扣leetcode 第 291 场周赛
85 0
|
9月前
|
Go vr&ar
golang力扣leetcode 第 288 场周赛
golang力扣leetcode 第 288 场周赛
62 0
|
9月前
|
Go
golang力扣leetcode第 294 场周赛
golang力扣leetcode第 294 场周赛
70 0
|
9月前
|
算法 Java Go
golang力扣leetcode 第 293 场周赛
golang力扣leetcode 第 293 场周赛
95 0
|
9月前
|
Go
golang力扣leetcode 第 290 场周赛
golang力扣leetcode 第 290 场周赛
58 0
|
4月前
|
人工智能 自然语言处理 程序员
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
欢迎来到工程师令狐小哥的频道。本文介绍如何利用AI工具高效刷LeetCode,通过通义灵码插件在IntelliJ IDEA中实现代码生成、优化、单元测试等功能,提升编程学习效率。
157 1
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
|
9月前
|
Go
golang力扣leetcode 第 292 场周赛
golang力扣leetcode 第 292 场周赛
79 0
|
9月前
|
存储
Leetcode第383场周赛
在LeetCode第383场周赛中,选手完成了3道题目。第一题是关于边界上的蚂蚁,蚂蚁根据非零整数数组nums的值移动,返回蚂蚁返回边界上的次数。解题方法是计算数组累加和为0的次数。第二题涉及计算网格的区域平均强度,给定一个灰度图像和阈值,返回每个像素所属区域的平均强度。解题关键在于理解相邻像素和区域定义,并计算平均强度。第三题是恢复单词初始状态的最短时间问题,通过移除前k个字符并添加k个字符,求恢复原词所需的最短时间。解题策略是检查去除前k个字符后的子串是否能作为原词的前缀。
42 1
Leetcode第383场周赛
|
9月前
|
存储
Leetcode第382场周赛
```markdown 给定字符串`s`,计算按键变更次数,即使用不同键的次数,不考虑大小写差异。例如,`&quot;aAbBcC&quot;`变更了2次。函数`countKeyChanges`实现此功能。另外,求满足特定模式子集最大元素数,`maximumLength`函数使用`TreeMap`统计次数,枚举并构建子集,返回最大长度。最后,Alice和Bob玩鲜花游戏,Alice要赢需满足鲜花总数奇数、顺时针在[1,n]、逆时针在[1,m],返回满足条件的(x, y)对数,可通过奇偶性分类讨论求解。 ```
48 1
|
9月前
|
Go
golang力扣leetcode 第 295 场周赛
golang力扣leetcode 第 295 场周赛
61 0