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

代码随想录算法训练营第二天 | 滑动窗口 + 螺旋矩阵

文章目录

    • Leetcode209 长度最小的连续子数组
        • 双指针/滑动窗口
    • Leetcode59 螺旋矩阵
        • 初始思路:找规律按索引填充

Leetcode209 长度最小的连续子数组

链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
代码随想录: https://programmercarl.com/
时间复杂度: O(logN)
空间复杂度: O(1)

双指针/滑动窗口

利用左右指针依次遍历.
当sum >= target时, 记录当前长度, 并开始右移left指针, 寻找最短的连续子数组
当sum < target时, 右移right指针, 直到找到满足要求的结果
引入标志位finded, 用于记录是否找到过有效结果, 若找不到则返回0

时间复杂度: O(N^2)
空间复杂度: O(1)

int minSubArrayLen(int target, std::vector<int> & nums) {if (nums.empty()) {return 0;}int left = 0, sum = 0, current_length = INT_MAX;bool finded = false;for (int right = 0; right < nums.size();) {sum += nums[right++];while (sum >= target) {current_length = std::min(current_length, right - left);finded = true;sum -= nums[left++];}}return finded ? current_length : 0;
}

Leetcode59 螺旋矩阵

链接:https://leetcode.cn/problems/spiral-matrix-ii

初始思路:找规律按索引填充
  1. 预先分配结果空间为n * n, 因此空间复杂度为O(N^2)
  2. 由于会遍历整个二维数组, 因此时间复杂度也是O(N^2)
  3. 顺时针的填充方向可分为两组: 向右向下, 向左向上
  4. 每组方向上填充的数量依次为n, n-1, n-2, …, 1. 且方向为交替出现
  5. 当n和 i 的奇偶性一致时, 填充方向为向右向下. 不一致时填充方向为向左向上.

注意事项:
每组方向填充结束后, 由于下一组一定是先横向填充, 因此需主动更新一次列索引

std::vector<std::vector<int>> generateMatrix(int n) {if (n <= 0) {return {};}if (n == 1) {return { {1} };}// 预先分配内存空间std::vector<std::vector<int>> result;result.resize(n);for (auto & res : result) {res.resize(n);}// 开始填充// 标志位:奇数是否向右向下填充bool odd_fill_to_right = (n % 2) != 0;int number = 1, row_index = 0, column_index = 0;for (int i = n; i > 0; i--) {int row_steps = i;int column_steps = i;bool add_index = (i % 2) != 0 ? odd_fill_to_right : !odd_fil_to_right;while (row_steps > 0 && column_steps > 0) {result[row_index][column_index] = number++;if (column_steps > 1) {  // 横向填充column_index = add_index ? column_index + 1 : column_index - 1;column_steps--;} else {  // 纵向填充if (--row_steps != 0) {row_index = add_index ? row_index + 1 : row_index - 1;}}}column_index = add_index ? column_index - 1 : column_index + 1;}return result;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • React概念理解
  • 使用yolov5实现目标检测简单案例(测试图片)
  • MySQL- 覆盖索引
  • STM32初识
  • 3.类和对象(中)
  • 《Techporters架构搭建》-Day06 国际化
  • 怎样在 SQL 中对一个包含销售数据的表按照销售额进行降序排序?
  • Ubuntu安装Anaconda3
  • Bug定义及生命周期(七)
  • Java中Maven打包方式pom、jar、war的区别
  • 对象切片(Object Slicing)
  • Data Harmonizer(数据协调器)------线程
  • 拥有一个公网固定IP,既然如此简单、HTTP 虚拟专线:为您开启专属网络访问新时代
  • 【STM32 FreeRTOS】事件标志组
  • C语言-使用数组法,指针法实现将一个5X5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序为从左到右,从上到下,从小到大存放),写一函数实现之。
  • JavaScript-如何实现克隆(clone)函数
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • CentOS6 编译安装 redis-3.2.3
  • co.js - 让异步代码同步化
  • create-react-app做的留言板
  • Cumulo 的 ClojureScript 模块已经成型
  • HTTP那些事
  • Linux链接文件
  • Promise初体验
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue2.0 实现互斥
  • Vue官网教程学习过程中值得记录的一些事情
  • windows下使用nginx调试简介
  • 闭包,sync使用细节
  • 从0实现一个tiny react(三)生命周期
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 实现简单的正则表达式引擎
  • 网络应用优化——时延与带宽
  • MPAndroidChart 教程:Y轴 YAxis
  • ​​​​​​​​​​​​​​Γ函数
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​业务双活的数据切换思路设计(下)
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # 透过事物看本质的能力怎么培养?
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (windows2012共享文件夹和防火墙设置
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)学习JVM —— 垃圾回收机制
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • .cfg\.dat\.mak(持续补充)
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth