leetcode算法刷题1

嗨,大家好,我是心海

这是算法算题系列第 1 篇文章

这个系列主要是记录一下刷题的过程

也激励自己坚持刷题下去,大概每篇文章记录 1 到 3 题,以七天为周期

这是第一个七天第 1 篇文章

我们从简单的题目开始

目录

一、力扣3285. 找稳定山下标

二、力扣3110. 字符串的分数

三、力扣3280. 日期转二进制表示

 结语


一、力扣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('-'))

 结语

力扣算法刷题栏目,仅仅是记录下解答过程,所以不一定是最好的、最优的答案,更多优秀题解可以参考官方答案

如果这篇文章对你有所启发,期待你的点赞关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值