LeetCode Hot 100(ACM 模式)- labuladong 的算法笔记

刷题顺序:按照类型,每次取一道出来,轮流刷题;避免类型依赖

✨第一轮:

1

1. 两数之和 | labuladong.online

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        d={}
        for i in range(len(nums)):
            if target-nums[i] in d.keys():
                return [d[target-nums[i]],i]
            d[nums[i]]=i

283

283. 移动零 | labuladong.online

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        N=len(nums)
        l=0
        while l<N and nums[l]!=0:
            l+=1
        r=l+1
        while r<N and nums[r]==0:
            r+=1

        while r<N:          
            nums[l],nums[r]= nums[r],nums[l]
            while r<N and nums[r]==0:
                r+=1
            l+=1

73

73. 矩阵置零 | labuladong.online

空间复杂度:O(m+n)解法

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        m=len(matrix)
        n=len(matrix[0])
        rows=m*[False] #第i行是否存在0
        cols=n*[False]
        for i in range(m):
            for j in range(n):
                if matrix[i][j]==0:
                    rows[i]=True
                    cols[j]=True
        for i in range(m):
            for j in range(n):
                if rows[i] or cols[j]:
                    matrix[i][j]=0