嗨,大家好,我是心海
这是算法算题系列第 1 篇文章
这个系列主要是记录一下刷题的过程
也激励自己坚持刷题下去,大概每篇文章记录 1 到 3 题,以七天为周期
这是第一个七天第 1 篇文章
我们从简单的题目开始
目录
一、力扣3285. 找稳定山下标
题目如下
这是一道比较简单的题目,根据题目逻辑编写出最直接解法
遍历数组,从下标 1 开始到 n-1 ,数组元素 height[i-1] 大于 threshold 即为符合条件,加入返回结果数组
class Solution:
def stableMountains(self, height: List[int], threshold: int) -> List[int]:
re=[]
for i in range(1,len(height)):
if height[i-1]>threshold:
re.append(i)
return re
提交结果
很容易看出,函数时间复杂度为 O(n) ,题目比较简单,就不进一步优化,给出另一种解法
return [i for i, h in enumerate(height[:-1], 1) if h > threshold]
其中 enumerate 是将列表除最后一个元素截取出来,截取后第一个元素下标设置为 1
二、力扣3110. 字符串的分数
题目如下
同样先编写最简单直接的解法
class Solution:
def scoreOfString(self, s: str) -> int:
score = 0
for i in range(len(s) - 1):
score += abs(ord(s[i]) - ord(s[i + 1]))
return score
其中 abs 函数是获取绝对值,ord 是获取对应字符的 ASCII 码
同样 python 可以一行出结果
return sum(abs(x - y) for x, y in pairwise(map(ord, s)))
这里边,首先将字符串 s
中的每个字符通过 ord()
函数转换为对应的 ASCII 码值,返回一个包含这些 ASCII 码值的迭代器。
然后 pairwise 将 map(ord, s)
返回的迭代器中的元素两两配对,返回一个新的迭代器,迭代器中的每个元素是一个包含两个相邻字符 ASCII 码值的元组。
三、力扣3280. 日期转二进制表示
题目
同样,题目比较简单,我们直接编写一个最直接的解法
class Solution:
def convertDateToBinary(self, date: str) -> str:
li=date.split('-')
for i in range(len(li)):
li[i]=bin(int(li[i]))[2:]
return "-".join(li)
其中,bin 是将 int 转二进制,截取下标为 2 开始的部分,也就是去除二进制前缀 0b
同样可以一行解出
return '-'.join(bin(int(s))[2:] for s in date.split('-'))
结语
力扣算法刷题栏目,仅仅是记录下解答过程,所以不一定是最好的、最优的答案,更多优秀题解可以参考官方答案
如果这篇文章对你有所启发,期待你的点赞关注!