当前位置: 首页 > news >正文

代码随想录算法训练营第二天 | 长度最小的子数组、螺旋矩阵Ⅱ、区间和、

长度最小的子数组

题目链接:[https://leetcode.cn/problems/minimum-size-subarray-sum/]
文章讲解:[https://programmercarl.com/0209.长度最小的子数组.html]
视频讲解:[https://www.bilibili.com/video/BV1tZ4y1q7XE]


解法

该题采用滑动窗口来解决。与暴力法的先固定起点再遍历终点再移动起点再遍历终点...不同,滑动窗口则是有一个前索引,一个后索引组成窗口,前索引向前滑动,判断窗口内的和是不是大于目标值,
如果小于:

  • 窗口继续滑动,后索引向后,更新和。
    如果大于等于:
  • 记录窗口长度,与目前的最大值比较;前索引向后,使窗口滑动(如果向前一个格子,和依然大于等于目标值,则继续滑动)
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int i = 0;int sum = 0;int result = 1e9+ 1;int len;for(int j = 0;j < nums.size();j++){sum += nums[j];while(sum >= target){len = j - i + 1;result = result < len?result : len;sum = sum - nums[i];i++;}}if(result == 1e9 + 1) return 0;else return result;}
};

思考

滑动窗口适用于在数组中寻找符合要求的一段子序列,避免了窗口一端固定死的暴力穷举,而是让窗口滑动起来,让起点和终点在特定条件下移动。

螺旋矩阵

题目链接:[https://leetcode.cn/problems/spiral-matrix-ii/]
文章讲解:[https://programmercarl.com/0059.螺旋矩阵II.html]
视频讲解:[https://www.bilibili.com/video/BV1SL4y1N7mV/]


解法

使用方向数组,设置预选方向,之前做过很多次了

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> matrix(n,vector<int>(n));int i = 0;int j = 0;vector<vector<int>> direction{{0,1},{1,0},{0,-1},{-1,0}};//right,down,left,upint dir = 0;int ni = i;int nj = j;vector<vector<int>> map(n,vector<int>(n,0));for(int m = 1;m <= n * n;m++){if(ni < 0 || ni >= n || nj < 0 || nj >= n || map[ni][nj] == 1){dir = (dir + 1) % 4;ni = i + direction[dir][0];nj = j + direction[dir][1];}i = ni;j = nj;matrix[i][j] = m;map[i][j] = 1;ni += direction[dir][0];nj += direction[dir][1];}return matrix;}
};

区间和

链接:[https://kamacoder.com/problempage.php?pid=1070]


解法

不使用暴力法,采用前缀和,即一个p数组,p[i]用于存储数据数组从arr[0] ~ arr[i]的值,这样从索引a到索引b的和不用重复计算,直接用p[b] - p[a - 1]即可。

#include<iostream>
#include<vector>
using namespace std;int main(){int n;cin >> n;vector<int> arr(n);vector<int> p(n);int pre = 0;for(int i = 0;i < n;i++){cin >> arr[i];pre += arr[i];p[i] = pre;}int res;int a,b;while(cin >> a >> b){if(a == 0) cout << p[b] << endl;else{res = p[b] - p[a - 1];cout << res << endl;}}
}

思考

acm输入输出模式中,当输出数量不确定时,可以使用while(cin >> a)这样的方式,当下一个输出为结尾或者回车就跳出循环了。
这种前缀和在计算一段区间的和时很有用,可以替代暴力计算。且可以用在二维数组中:[https://programmercarl.com/kamacoder/0044.开发商购买土地.html#思路]


算法刷题第二天,坚持!成为coding master

http://www.jsqmd.com/news/440687/

相关文章:

  • 2026年质量好的全钢制公寓床公司推荐:员工宿舍公寓床高口碑品牌推荐 - 行业平台推荐
  • 2026年优秀的双层宿舍铁床工厂推荐:宿舍铁床款式厂家选择指南 - 行业平台推荐
  • day1寻找除数
  • 2026年口碑好的模压TPE颗粒工厂推荐:吸塑脚垫TPE颗粒/TPE汽车脚垫颗粒精选厂家推荐 - 行业平台推荐
  • 【大数据毕设全套源码+文档】基于django+深度学习的经典名著推荐系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 2026年可靠的橡胶辊品牌推荐:钢辊橡胶辊/烫金轮橡胶辊实力工厂怎么选 - 行业平台推荐
  • 2026年比较好的PC板温室大棚品牌推荐:锯齿温室大棚/养殖温室大棚厂家实力与用户口碑参考 - 行业平台推荐
  • 2026年质量好的透气三明治网布厂家推荐:鞋材三明治网布/涤纶三明治网布实力厂家如何选 - 行业平台推荐
  • 2026年可靠的无马弗网带炉厂家推荐:等温正火式网带炉优质供应商推荐 - 行业平台推荐
  • Chartbrew:一个开源的数据可视化平台 - 指南
  • 麒麟系统安装mysql8
  • Godot游戏练习01-第3节-多人场景创建
  • c++入门
  • 2026年如何安装立式环形绕线机品牌推荐:半自动环形绕线机实力工厂怎么选 - 行业平台推荐
  • 2026年可靠的生态移动厕所公司推荐:户外移动厕所/旅游景区移动厕所厂家选择指南 - 行业平台推荐
  • 级联阴影贴图(CSM)的核心思想
  • 【大数据毕设源码分享】基于Spark+django的温布尔登特色赛赛事数据分析可视化平台设计与实现现(程序+文档+代码讲解+一条龙定制)
  • 2026年评价高的BR板式换热器工厂推荐:波纹板式换热器实力工厂推荐 - 行业平台推荐
  • 【大数据毕设源码分享】基于django+深度学习的经典名著推荐系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 稀疏数组
  • 【大数据毕设源码分享】基于深度学习django的淘宝用户购物可视化与行为预测系统设计(程序+文档+代码讲解+一条龙定制)
  • 2026年优秀的铝方通品牌推荐:造型铝方通/铝方通格栅/铝合金铝方通销售厂家哪家好 - 行业平台推荐
  • 【大数据毕设源码分享】基于python+django的中文起点网top500小说数据提取的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 2026年耐用的PA66尼龙隔热条厂家推荐:铝型材尼龙隔热条/节能门窗尼龙隔热条可靠供应商推荐 - 行业平台推荐
  • 【TOP EI 期刊复现】考虑灵活性的数据中心微网两阶段鲁棒规划方法Matlab代码
  • 无人机分布式跟随协同编队控制、路径规划Matlab程序附参考文献
  • 2026年诚信的高压旋转接头厂家推荐:加工中心旋转接头源头厂家推荐几家 - 行业平台推荐
  • 游记 GDOI2026(I)
  • 2MW风力发电机并网+背靠背模式+新能源发电Matlab仿真
  • 完整教程:2025年如何搭建合规数字资产交易所?技术架构、牌照申请与生态运营全攻略