代码随想录算法训练营第二天 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II

#977  有序数组的平方

双指针用法

内置函数enumerate

seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
           print i, element

0 one
1 two
2 three

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

#209.长度最小的子数组

思路:i和j,当j遍历到总和大于s了,取当下长度,接着移动i,判断当下的j-i+1长度的总和是否大于s,如果不,移动j,直至大于s,取当下长度;

滑动窗口,要不断的调节起始位置i

注意初始设置result要足够大保证能取子序列里的最小值,比较当下取的子序列和result的值取最小

float() 函数用于将整数和字符串转换成浮点数

return时要考虑target永远不存在在序列中的情况,比如[1,1,1,1,1,1],target是11

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        result = float('inf')              #定义一个足够大的数
        i, j = 0, 0                        #初始终止位置均设置成0
        num = 0                            #设置初始和
        for j in range(len(nums)):         
            num += nums[j]                 
            while num >= target:
                result = min(result, j-i+1)#比较当前的和里数量最小的值
                num -= nums[i]             #i要开始移动了
                i += 1                     #顺序不能错
        return 0 if result == float("inf") else result   #考虑[1,1,1,1,1] target 11,没有的情况

#59.螺旋矩阵II

左闭右开的概念,要循环一个原则

从左到右缩小上边界

从上到下缩小右边界

从右到左缩小下边界

从下到上缩小左边界

class Solution:
    def generateMatrix(self, n: int) -> [[int]]:
        l, r, t, b = 0, n - 1, 0, n - 1
        mat = [[0 for _ in range(n)] for _ in range(n)]
        num, tar = 1, n * n
        while num <= tar:
            for i in range(l, r + 1): # left to right
                mat[t][i] = num
                num += 1
            t += 1
            for i in range(t, b + 1): # top to bottom
                mat[i][r] = num
                num += 1
            r -= 1
            for i in range(r, l - 1, -1): # right to left
                mat[b][i] = num
                num += 1
            b -= 1
            for i in range(b, t - 1, -1): # bottom to top
                mat[i][l] = num
                num += 1
            l += 1
        return mat

       毫无头绪            

  • 看完代码随想录之后的想法 

       依次处理边界

      

  • 自己实现过程中遇到哪些困难

       设置初始值没有想法  

  • 今日收获,记录一下自己的学习时长
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值