算法训练第二天

209. 长度最小的子数组

思路:

这道题原本想用后缀和。但是超时了。只能用双指针模拟一个滑动窗口并用一个变量sum去记录窗口内的和。

代码:

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        min_len = 0x3f3f3f3f
        sum = 0
        i = 0
        for j in range(0, len(nums)):
            sum += nums[j]
            while sum >= target:
                cur_len = j - i + 1
                min_len = min(min_len, cur_len)
                sum -= nums[i]
                i += 1

        return min_len if min_len != 0x3f3f3f3f else 0

59. 螺旋矩阵 II

思路:

很简单的一道模拟类的题目,只需要想清楚填充的区间即可。

代码:

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        arr = [[0 for h in range(0,n)] for i in range(0,n)]

        i = 0
        j = 0
        this_num = 1
        while this_num <=n*n:
            while j<n and arr[i][j]==0:
                arr[i][j] = this_num
                j+=1
                this_num+=1
            j-=1
            i+=1
            while i<n and arr[i][j]==0:
                arr[i][j] = this_num
                i += 1
                this_num += 1
            i-=1
            j-=1
            while j>=0 and arr[i][j]==0:
                arr[i][j] = this_num
                j -= 1
                this_num += 1
            j+=1
            i-=1
            while i>=0 and arr[i][j]==0:
                arr[i][j] = this_num
                i -= 1
                this_num += 1
            i+=1
            j+=1
        return arr

58. 区间和

思路:

经典的前缀和算法应用。

代码:

import sys

def main():
    num = int(int(sys.stdin.readline()))
    arr = [int(int(sys.stdin.readline())) for i in range(num)]

    arr1 = arr.copy()
    for i in range(1,num):
        arr1[i] += arr1[i-1]


    for line in sys.stdin:
        a, b = map(int, line.strip().split())
        print(arr1[b]-arr1[a]+arr[a])

if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiaaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值