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

embedded/2024/11/15 4:29:39/

文章目录

    • 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;
}

http://www.ppmy.cn/embedded/96611.html

相关文章

Java面试八股之简述消息队列P2P模型

简述消息队列P2P模型 P2P模型组件 生产者(Producer)&#xff1a;生产者是创建并发送消息的实体。它可以是一个应用程序、服务或任何产生数据的系统组件。 队列(Queue)&#xff1a;队列是存储消息的数据结构。在P2P模型中&#xff0c;队列扮演着中间存储的角色&#xff0c;负…

[Qt][对话框][上]详细讲解

目录 0.是什么&#xff1f;1.对话框的分类2.混合属性对话框 0.是什么&#xff1f; ⼀些不适合在主窗⼝实现的功能组件可以设置在对话框中对话框通常是⼀个顶层窗⼝&#xff0c;出现在程序最上层&#xff0c;⽤于实现短期任务或者简洁的⽤⼾交互Qt中使用QDialog类表示对话框&am…

Unity脚本一键修改所有预制体

需求 预制体中的Text组件默认是使用Unity的内置字体Arial。 但是在Unity2022之后&#xff0c;Text组件就被弃用了&#xff0c;内置字体Arial也移除了。 如果项目从2022之前的版本升到2022&#xff0c;那么Text组件的字体文件会自动改为LegacyRuntime.ttf文件。 其中LegacyR…

关于鸿蒙开发中装饰器@Extend、@Styles、@Builder的介绍

总结 名称适合是否可以参数Extend抽取 特定组件 样式、事件√Styles抽取 公共 样式、事件Builder抽取 结构、样式、事件√ Extend 语法&#xff1a; Extend(要扩展的组件&#xff0c;例如Text、Column、Row等) function functionName { ... } 使用规则&#xff1a; 1、Ex…

使用API有效率地管理Dynadot域名,对拍卖的域名进行出价

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

【C++】什么是模板?

有不懂的地方可以翻阅我之前文章&#xff01; 个人主页&#xff1a;CSDN_小八哥向前冲 所属专栏&#xff1a;CSDN_C入门 目录 模板函数 泛型编程 函数模板 类模板 模板函数 泛型编程 在之前的学习里&#xff0c;我们知道函数可以重载&#xff0c;当我们在实现多参数函数交…

MySQL 简介

一、MySQL 概述 1.1 什么是 MySQL&#xff1f; MySQL 是全球最受欢迎的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;之一&#xff0c;由瑞典的 MySQL AB 公司开发&#xff0c;后被 Sun Microsystems 收购&#xff0c;最终于 2010 年被 Oracle 公司收购。MySQL 使用…

微信小程序--24(列表渲染)

一、wx&#xff1a;for 1.作用 根据指定数组&#xff0c;循环渲染重复的组件结构 2.语法 <view wx:for"{{data中的数据}}"> 索引是&#xff1a;{{index}}, item项是&#xff1a;{{item}}</view> index:表索引item&#xff1a;表当前循环项 …