算法训练营第二天| 209.长度最小的子数组、59.螺旋矩阵II、区间和
209.长度最小的子数组
题目
思路与解法
**第一想法:**无
carl的讲解: 滑动窗口
class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:i=j=0lens = len(nums)sum = 0res = lens + 1while j < lens:# for m in range(i, j+1):# sum += nums[m]sum += nums[j]while sum >= target:# res = j - i + 1 if res > j -i + 1 else resres = min(j-i+1, res)sum -= nums[i]i += 1j += 1return res if res < lens + 1 else 0
注释的地方增加了时间复杂度,导致运算超时
59.螺旋矩阵II
题目
思路与解法
第一想法: 无
carl的讲解: 模拟过程的题 找到一定的规律去模拟整个过程
class Solution:def generateMatrix(self, n: int) -> List[List[int]]:startx = starty = 0 # 每次的起始下标i = j = 0 # 下标count = 1 # 要填入的数res = [[0] * n for i in range(n)]for j in range(n // 2):startx = jstarty = jfor i in range(0, n-1 -j*2):print(startx, starty)res[startx][starty] = countcount += 1starty = starty + 1for i in range(0, n-1-j*2):print(startx, starty)res[startx][starty]= countcount += 1startx = startx + 1for i in range(0, n-1-j*2):print(startx, starty)res[startx][starty]= countcount += 1starty = starty - 1for i in range(0, n-1-j*2):print(startx, starty)res[startx][starty]= countcount += 1startx = startx - 1if n % 2 == 1:res[n//2][n//2] = count return res
区间和
题目
思路与解法
carl的讲解: 前缀和思想,简化计算,暴力法也能做,但是时间复杂度高。
#include <iostream>
#include <vector>
using namespace std;
int main() {int n, a, b;cin >> n;vector<int> vec(n);vector<int> p(n);int presum = 0;for (int i = 0; i < n; i++) {cin >> vec[i];presum += vec[i];p[i] = presum;}while (cin >> a >> b) {int sum;if (a == 0) sum = p[b];else sum = p[b] - p[a - 1];cout << sum << endl;}
}