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

代码随想录-DAY②-数组——leetcode 977 | 209

977

思路

使用两个指针分别指向位置 0 和 n−1,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针。这种方法无需处理某一指针移动至边界的情况。

时间复杂度:O(n)
空间复杂度:O(1)

代码
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int left = 0;int right = nums.size()-1;int last = right;vector<int> ans(nums.size());while(left<=right){if(nums[left]*nums[left]>nums[right]*nums[right]){ans[last--]=nums[left]*nums[left++];}else{ans[last--]=nums[right]*nums[right--];}}return ans;}
};

209

思路

所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
窗口的起始位置如何移动:如果当前窗口的值大于等于s了,窗口就要向前移动了(也就是该缩小了)。
窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)暴力解法降为O(n)。

时间复杂度:O(n)
空间复杂度:O(1)

代码
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int sum = 0, sublen = 0, i=0;int result = INT32_MAX;for (int j=0; j<nums.size(); j++){sum+=nums[j];while(sum>=target){sublen = j-i+1;result = sublen<result?sublen:result;sum -= nums[i++];}}return result == INT32_MAX?0:result;}
};
http://www.lryc.cn/news/391385.html

相关文章:

  • 稀疏数组搜索
  • 存储器类型介绍
  • 论文学习笔记1:Federated Graph Neural Networks: Overview, Techniques, and Challenges
  • [数据集][目标检测]轮椅检测数据集VOC+YOLO格式13826张1类别
  • 视频剪辑音乐自动卡点Pr插件 BeatEdit v2.2 免费下载
  • 【INTEL(ALTERA)】为什么Nios® II构建流程报告无法在 Windows WSL 上确定程序大小?
  • 2024年第十四届APMCM亚太地区大学生数学建模竞赛
  • 删除账户相关信息
  • JavaSE (Java基础):面向对象(下)
  • Element中的日期时间选择器DateTimePicker和级联选择器Cascader
  • Construct公司 从 0 到 1 基于 Kitex+Istio 的微服务系统建设
  • day04-组织架构
  • Web3 开发者入门手册:技能、工具和职业前景
  • 元宇宙虚拟实景展馆树立客户对企业的信任和好感
  • 【C语言】宏定义在 a.c 中定义,如何在 b.c 中使用?
  • vue3 滚动条滑动到元素位置时,元素加载
  • [Linux] 相对路径(Relative Path)与绝对路径(Absolute Path)
  • [ESP32] I2S播放wav文件
  • YOLOv8
  • 协程调度模块
  • 2024 最新docker仓库镜像,6月,7月
  • 探索Vim的文本处理能力:精通查找与替换
  • 2024.7.4学习日报
  • 享元模式(Flyweight Pattern)
  • Oracle连接mysql
  • golang 垃圾回收
  • React 中如何使用 Monaco
  • 开源RAG个人知识库项目开发分析
  • 事务底层与高可用原理
  • 树状数组基础知识