day2

58 阅读2分钟
  • python创建数组

image.png

image.png

一开始的思路是先二分法找到0,再往两边双指针分开。但多此一举,直接从两边往中间双指针靠拢就行。

 class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        n = len(nums)
        i,j,k = 0,n - 1,n - 1
        ans = [-1] * n
        while i <= j:
            lm = nums[i] ** 2
            rm = nums[j] ** 2
            if lm > rm:
                ans[k] = lm
                i += 1
            else:
                ans[k] = rm
                j -= 1
            k -= 1
        return ans

关键在于 以窗口的结尾位置作为循环标志,确定每个循环里满足条件的最短子数组的长度。

class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        res = float("inf")   # 定义一个无限大的数
        Sum = 0     # 滑动窗口数值之和
        i = 0      # 滑动窗口起始位置
        for j in range(len(nums)):
            Sum += nums[j]
            while Sum >= s:
                res = min(res, j-i+1)
                Sum -= nums[i]
                i += 1
        return 0 if res == float("inf") else res

“ // ” 表示整数除法,返回整数 比如 6//2 结果为3,7//2结果也是3
“ / ” 表示浮点数除法,返回浮点数 (即小数) 比如 6/2 结果为3.0 ,7/2=3.5
“ %” 表示取余数 比如7%4 结果为3

(7条消息) Python中的for i in range(range()函数的for循环)如何使用,详细介绍_for in range循环_宝藏女孩的成长日记的博客-CSDN博客

注意range中循环变量的范围和顺序

变量count的使用

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        ans = [[0]*n for i in range(n)]
        count = 1
        for i in range(n//2):
            for j in range(i,n-i-1):
                ans[i][j] = count
                count+=1
            for j in range(i,n-i-1):
                ans[j][n-i-1]= count
                count+=1
            for j in range(n-i-1,i,-1):
                ans[n-i-1][j] = count
                count+=1
            for j in range(n-i-1,i,-1):
                ans[j][i]=count
                count+=1
        if n%2 != 0:
            ans[n//2][n//2]=n**2
        return ans