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

有序数组的平方 长度最小的子数组

有序数组的平方

有一个升序的整数数组nums(其中可包含负数),返回每个数字的平方组成的新数组,要求也按升序排序。

  • 输入:nums = [-4,-1,0,3,10]
  • 输出:[0,1,9,16,100]
  • 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]

我们还是沿用双指针的思路来解决,因为数组是有序的,只是因为有负数,所以会出现平方大小的问题,那么两边的平方一定是比中间的大的,所以我们定义两头,使用for循环,循环条件是始指针小于等于末指针时,执行操作。这里注意等号,比如数组只有两个元素[-2,0]i=0,j=1,第一次执行完后,i=1,j=1,这个时候需要再执行一次,因为索引1是没有平方操作的。

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int size = nums.size() - 1;std::vector<int> result(nums.size());for(int i=0, j = size; i <= j;){if(nums[i] * nums[i] > nums[j]*nums[j]){result[size--] = nums[i] * nums[i];++i;} else {result[size--] = nums[j] * nums[j];--j;}}return result;}
};

长度最小子数组

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

  • 输入:s = 7, nums = [2,3,1,2,4,3]
  • 输出:2
  • 解释:子数组 [4,3] 是该条件下的长度最小的子数组。

暴力解法

通过两个for循环,一个记录起始位置,一个记录末尾位置。

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int min = nums.size() + 1;int current_sum = 0;int current_len = 0;for(int i = 0; i < nums.size(); ++i){current_sum = 0;current_len = 0;for(int j = i; j < nums.size(); ++j){current_sum += nums[j];++current_len;if(current_sum >= target){if(current_len < min) min = current_len;break; // 我们找的是最短子序列,找到后就可以break退出了}}}return min == n + 1 ? 0 : min;}
};

滑动窗口

依然双指针的思路,我们有一个起始位置的指针,一个末尾位置的指针。可以通过一个for循环就解决问题,问题关键是搞清楚循环中是末尾位置还是起始位置,如果说是起始位置,那么在遍历剩下的终止位置就是一个棘手的问题,我们很难确定终止位置在哪,所以for循环中定义的是终止位置。

还有一个细节就是,循环中sum >= target是用if还是while,其实很好理解,举个例子就知道了,[1,1,1,10,3],target = 10,当我们终止位置j到3索引这个位置的时候,sum和为13,这时后应该进入循环while吧,而不是if只判断一次。

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int i = 0; // 左起始指针int sum = 0;int min = nums.size() + 1;int count = 0;for(int j = 0; j < nums.size(); ++j){sum += nums[j];while(sum >= target){count = j - i + 1; // 记录当前最小数组if(count < min){ min = count;}sum -= nums[i]; // 开始缩紧++i; // 更新起始位置}}return min == nums.size() + 1 ? 0 : min;}
};

在实现滑动窗口的时候,需要确定3点:

  • 窗口是什么?
  • 如何移动起始位置?
  • 如何移动终止位置?

窗口是最小连续集合的和满足 >= target 值

起始位置需要在最小集合的和满足要求的情况下,不断的向终止位置靠拢

终止位置在不满足最小集合和的情况下,遍历数组

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

相关文章:

  • 中建八局装饰|电子围栏 + 红黄牌管控让质量巡检更合规 - 搭贝
  • 豆包广告服务商联系方式 - 品牌2025
  • 专科生必看!千笔AI,行业天花板级的AI论文软件
  • 新手也能上手的AI论文软件,千笔AI VS 灵感风暴AI,专科生写作神器!
  • 强烈安利!8个降AIGC软件测评:专科生降AI率必备指南
  • 业务泳道流程图AIGC小试
  • nsynote-车
  • php方案 配置管理热更新
  • 想了解全自动粘钉一体机?2026国内实力厂家推荐榜单别错过,全自动粘钉一体机生产厂家技术领航者深度解析 - 品牌推荐师
  • 2026汽车后视镜热弯模具,实力厂家全揭秘,硅酸钙保温管/玻璃热弯模具,汽车后视镜热弯模具实力厂家推荐排行榜 - 品牌推荐师
  • 胜利油田现河工贸|国企油田安全生产全流程数字化 - 搭贝
  • Remix 数据加载深度解析
  • Cloudflare人机验证技术解析
  • Linux高并发服务器实现原理:从多进程到多路IO转接的演进之路
  • 京东E卡回收攻略,轻松变现! - 团团收购物卡回收
  • 【日记】科目一刷题终于能刷到模拟考过一次了(687 字)
  • swApp.OpenDoc(arg, (int)swDocumentTypes_e.swDocPART);在装配体打开的情况下无法打开零件 解决办法
  • PCB各层的含义
  • 交稿前一晚!专科生专属降AI率平台 —— 千笔AI
  • 京东E卡回收技巧,操作超简单! - 团团收购物卡回收
  • 用过才敢说 9个AI论文写作软件测评!本科生毕业论文+开题报告高效写作工具推荐
  • 聊聊资质齐全的二手奢侈品回收企业,费用怎么算? - 工业品牌热点
  • 文件格式转换工具大比拼:访答编辑器脱颖而出
  • Chrome 的 OptGuideOnDeviceModel (本地AI模型)可以删除吗?4GB 占用的解决方法
  • 北京好用的海关纳税争议解决律师推荐有哪些 - 工业品牌热点
  • 导师严选!AI论文软件 千笔ai写作 VS 笔捷Ai,专科生专属写作神器!
  • 北京上门回收明清硬木家具攻略,3家靠谱机构实测推荐 - 品牌排行榜单
  • 直接上结论:碾压级的降AI率软件 —— 千笔·专业降AIGC智能体
  • 干货合集:AI论文写作软件 千笔·专业论文写作工具 VS PaperRed,专科生必备神器!
  • 2026年验收秤市场热销品牌盘点,这些厂家值得关注,智能晨检仪/学校验收秤/膳食管理系统,验收秤制造企业排名 - 品牌推荐师