代码随想录—day_02

977.有序数组的平方

题目链接: 有序数组的平方
第一想法:暴力,遍历数组平方后排序,

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)):
            nums[i] = nums[i] ** 2 
        nums.sort()
        return nums

学习连接:代码随想录—有序数组的平方

学习后的方法:双指针,数组平方的最大值在数组的两端,i指向起始位置,j指向终点位置

  • 如果A[i] * A[i] < A[j] * A[j] , 那么result[k–] = A[j] * A[j]
  • 如果A[i] * A[i] >= A[j] * A[j],那么result[k–] = A[i] * A[i]
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        l, r = 0, len(nums) - 1
        n = len(nums)
        ans = [0 for _ in range(n)]
        k = n - 1
        while k >= 0:
            if nums[l] ** 2 > nums[r] ** 2:
                ans[k] = nums[l] ** 2
                k -= 1
                l += 1
            else:
                ans[k] = nums[r] ** 2
                k -= 1
                r -= 1
        return ans

注意:nums[l] ** 2 > nums[r] ** 2和k的对应关系,自己第一次用双指针的思想这里写反了

209.长度最小的子数组

第一想法:暴力遍历,两层循环,如果累加大于目标值且长度小于最小长度就更新ans(最小长度)
学习连接:代码随想录—209
滑动窗口-闪电五连鞭带你秒杀
学习后的想法:滑动窗口

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        ans = math.inf
        l = 0
        sum_targert = 0
        # 移动右指针
        for r in range(len(nums)):
            sum_targert += nums[r]
            # 移动左指针
            while sum_targert >= target:
                ans = min(ans,r-l+1)
                sum_targert -= nums[l]
                l += 1
        return ans if ans != math.inf else 0

59. 螺旋矩阵 II(补)

无想法
学习后的想法:
学习链接: 代码随想录

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        count = 1
        start_x,start_y = 0, 0
        matrix = [[0]*n for i in range(n)]
        loop, mid = n // 2, n // 2
        for offset in range(1,loop+1):
            for i in range(start_y, n - offset):
                matrix[start_x][i] = count
                count += 1
            
            for i in range(start_x, n - offset):
                matrix[i][n-offset] = count
                count += 1
            
            for i in range(n-offset,start_y, -1):
                matrix[n-offset][i] = count
                count += 1
            
            for i in range(n - offset, start_x, -1):
                matrix[i][start_y] = count
                count += 1
            
            start_x += 1
            start_y += 1

        if n % 2 == 1:
            matrix[mid][mid] = count
        return matrix
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值