LeetCode笔记:Weekly Contest 315
Posted Espresso Macchiato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Weekly Contest 315相关的知识,希望对你有一定的参考价值。
1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题思路还是很直白的,就是从大到小遍历所有的正数,然后返回第一个其相反数也存在在数组当中的数即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def findMaxK(self, nums: List[int]) -> int:
nums = sorted(nums, reverse=True)
seen = set(nums)
for i in nums:
if i < 0:
break
if -i in seen:
return i
return -1
提交代码评测得到:耗时314ms,占用内存14.1MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题同样非常的直接,我们对每一个数,将其本身和位反加入到一个集合当中,最后看一下这个集合当中有多少个元素即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def countDistinctIntegers(self, nums: List[int]) -> int:
def rev(x):
return int(str(x)[::-1])
s = set()
for x in nums:
s.add(x)
s.add(rev(x))
return len(s)
提交代码评测得到:耗时784ms,占用内存39.4MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题我们的思路非常的暴力,即遍历所有0到n的数字,然后看一下是否存在某一个数满足条件即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def sumOfNumberAndReverse(self, num: int) -> bool:
def rev(x):
return int(str(x)[::-1])
for i in range(num+1):
if i + rev(i) == num:
return True
return False
提交代码评测得到:耗时7938ms,占用内存13.9MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这一题非常的惭愧,我一样没有自己搞定,已经好久没有一周里面连续两个比赛都没有把第四题搞定的了,这周真的是简直了……
看了一下其他大佬们的解答,发现这一题其实非常的简单,就是考察每一个数作为右边界的条件下,考虑其左边界的可选数目,其结果就是上一个合法位置到最近一个minK
和maxK
中的较小值之间的距离。
2. 代码实现
给出大佬的python代码实现如下:
class Solution:
def countSubarrays(self, nums: List[int], minK: int, maxK: int) -> int:
n = len(nums)
res, left = 0, 0
pos1, pos2 = -1, -1
for right in range(n):
if nums[right] == minK:
pos1 = right
if nums[right] == maxK:
pos2 = right
if nums[right] < minK or nums[right] > maxK:
left = right + 1
res += max(0, min(pos1, pos2) - left + 1)
return res
以上是关于LeetCode笔记:Weekly Contest 315的主要内容,如果未能解决你的问题,请参考以下文章