2024.3.5力扣(<=1200)刷题记录1

一、1108. IP 地址无效化

class Solution:
    def defangIPaddr(self, address: str) -> str:
        return address.replace(".","[.]")

二、1480. 一维数组的动态和

class Solution:
    def runningSum(self, nums: List[int]) -> List[int]:
        sum = 0    #使用sum记录前面和,避免重复运算
        for i in range(len(nums)):
            sum += nums[i]
            nums[i] = sum
        return nums

看了题解后发现可以省略掉sum变量,并且要避免修改原数据,更改为如下:

class Solution:
    def runningSum(self, nums: List[int]) -> List[int]:
        # 简单的dp
        dp = [0] * len(nums)   #避免修改原数据
        dp[0] = nums[0]
        for i in range(1,len(nums)):
            dp[i] = dp[i-1] + nums[i]
        return dp

三、3028.边界上的蚂蚁. - 力扣(LeetCode)

class Solution:
    def returnToBoundaryCount(self, nums: List[int]) -> int:
        ans = 0
        sum = 0
        for i in range(len(nums)):
            sum += nums[i]
            if sum == 0:
                ans += 1
        return ans

另:灵神代码. - 力扣(LeetCode)

class Solution:
    def returnToBoundaryCount(self, nums: List[int]) -> int:
        return sum(s == 0 for s in accumulate(nums))

解释:(来自chatgpt)

  1. s == 0 for s in accumulate(nums) 是一个生成器表达式(generator expression),它会对 accumulate(nums) 返回的累加结果进行迭代。对于每个迭代的值 s,它会判断是否等于 0,返回一个布尔值(True 或 False)。

  2. 在 Python 中,布尔值 True 被当作整数 1,而布尔值 False 被当作整数 0。因此,在这个生成器表达式中,每次 s 等于 0 时会返回 True(即值为 1),否则返回 False(即值为 0)。

  3. 最外层的 sum() 函数会对这些布尔值(0 或 1)进行求和操作。由于 True 被当作 1,False 被当作 0,所以最终的求和结果就是等于 0 的元素的个数。

四、1394.找出数组中的幸运数. - 力扣(LeetCode)

class Solution:
    def findLucky(self, arr: List[int]) -> int:
        # 哈希表
        hash = [0] * 501    # 1 <= arr[i] <= 500
        for i in range(len(arr)):
            hash[arr[i]] += 1
        for i in range(500,0,-1):
            if hash[i] == i:
                return i
        return -1

上述代码使用的是数组作为哈希表,下一代码是使用字典作为哈希表(字典代码参考官方题解):

class Solution:
    def findLucky(self, arr: List[int]) -> int:
        # 题解代码
        hash = dict()
        for x in arr:
            hash[x] = hash.get(x,0) + 1    #常用写法
        ans = -1
        for (k,v) in hash.items():
            if k == v:
                ans = max(ans,k)
        return ans

五、1407.重新排列数组. - 力扣(LeetCode)

class Solution:
    def shuffle(self, nums: List[int], n: int) -> List[int]:
        # 模拟法
        ans = [0] * (2*n)
        for i in range(n):
            ans[2*i] = nums[i]
            ans[2*i+1] = nums[n+i]
        return ans

在评论区里面看见了切片法,觉得很妙,一起粘贴在这里(侵权删):

class Solution:
    def shuffle(self, nums: List[int], n: int) -> List[int]:
        # 切片法
        nums[::2],nums[1::2] = nums[0:n],nums[n:]
        return nums

感谢你看到这里!一起加油吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值