代码随想录day2

题目一

采用双指针法,仍然需要注意区间的开闭判断情况

class Solution(object):
    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        left=0
        right=len(nums)-1
        nums_square=[0]*len(nums)
        end=right
        
        while left<=right:
            if nums[left]*nums[left]<=nums[right]*nums[right]:
                nums_square[end]=nums[right]*nums[right]
                right-=1
            elif nums[left]*nums[left]>nums[right]*nums[right]:
                nums_square[end]=nums[left]*nums[left]
                left+=1
            end-=1

        return nums_square

题目二

滑动窗口法,遍历窗口结束位置,然后动态调节起始位置。应该预先设置result为最长长度,之后在调节窗口起始位置时不断更新result

class Solution(object):
    def minSubArrayLen(self, target, nums):
        """
        :type target: int
        :type nums: List[int]
        :rtype: int
        """
        start=0
        result=len(nums)
        sm=0
        if sum(nums)<target:
            return 0
        for end in range(len(nums)):
            sm+=nums[end]
            while sm >=target:
                L=end-start+1
                result =min(L,result)
                sm-=nums[start]
                start+=1
        return result    
    

题目三

注意循环不变量:每次循环执行时,处理边界的标准要一致(与二分法开闭区间的思想相同),填充顺序为:1-2,3-4,5-6,7-8,9(start:end-offset)

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        nums=[[0]*n for _ in range(n)] #先建立一个数组
        startr=0 #初始row
        startc=0 #初始clo
        offset=1 #每次for循环,从初始位置到最后位置的前一个
        count=1  #赋值
        cyc=1    #圈数
        mid= n//2 #n为奇数,中间单独填充
        while cyc<= n//2:#循环的圈数是n//2
            for j in range(startc,n-offset) :
                nums[startr][j]=count
                count+=1
            for i in range(startr,n-offset) :
                nums[i][n - offset]=count
                count+=1
            for j in range(n-offset,startc,-1) :
                nums[n - offset][j]=count
                count+=1
            for i in range(n-offset,startr,-1) :
                nums[i][startc]=count
                count+=1
            cyc+=1
            startr+=1
            startc+=1
            offset+=1

        if n%2 != 0:
            nums[mid][mid]=n*n

        return nums

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值