代码随想录训练营day 2 |977有序数组的平方 209.长度最小的子数组 (C++)
977、有序数组的平方
题目链接:977、有序数组的平方
题目描述:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 例子如下:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
思路
首当其冲我们想到暴力算法解题,每个数平方之后,排个序,美滋滋。
应该为一个for循环进行全部平方,直接调用sort进行排序即可,时间复杂度n+n*log2n
代码如下:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int i;
for(i=0;i<nums.size();i++){
nums[i]*=nums[i];//num【i】的平方操作
}
sort(nums.begin(),nums.end());//这里就用了sort()类似于快速排序的方法,sort()方法只要一条语句就可以实现排序,sort()有三个参数(begin , end, cmp),begin为sort()数组的第一个元素的指针,end是最后一个元素的下一个位置指针,cmp不写的话就默认排序为从小到大,若写为greater<int>则是从大到小。//
return nums;
}
};
除了暴力算法,当然要学习好的双指针法用来解题。
双指针法即用一个fro循环能干两个fro循环的事,
代码如下:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A){
int k = A.size() - 1;//k是A数组要更新下标,是从大到小来更新。
vector<int> result(A.size(), 0);//建立一个新的result数组存放
for(int i = 0; int j = nums.size() - 1; i<=j;){//定义两个下标,条件,注意
//这里没写i++等炒作,因为不知道i大还是j大,从而不知i+还是j—。
if(nums[i]*nums[i] > nums[j]*nums[j]){
A[k] = nums[i]*nums[i];
k--;
i++;
}
else //num[i]<=nums[j]
A[k--] = nums[j]*nums[j];
j--;
}
return result;
}

209.长度最小的子数组
题目链接:209.长度最小的子数组
题目描述:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。
思路
暴力解法:用两个for循环 一个在前 一个在后,遍历一遍>= 7
代码如下(但现在力扣会超时)
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int result = TNT32_MAX;
int sum = 0;//子序列的和
int subLength = 0;//子序列长
for (let i = 0; i < length; i++) {
sum = 0; // 每次外层循环清空累加和,方便内层循环进行累加
for (let j = i; j < length; j++) {
sum += nums[j]; // 累加内层循环的值
if (sum >= target) {
// 判断累加和是否大于等于目标值
let subLength = j - i + 1; // 如果满足条件,则计算满足条件的数组长度
result = result > subLength ? subLength : result; // 取两者的较小值来更新结果
break; // 满足条件则退出内层循环
}
滑动窗口解法:
以题目中的示例来举例,s=7, 数组是 2,3,1,2,4,3,来看一下查找的过程:

代码如下
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums){
int sum = 0;
int result = Max;
int i = 0;
int sublength = 0;
for(int j = 0; j <= nums.size; j++ ){
sum +=sum[j];//收集sum华东窗口的和
while(sum >= val){//注意这里用while而不是if,因为只有不满足sum>=val目标值时退出
subl = j - i + 1;//i一开始是起始位置,subl是长度,所以要加一
result = result < subLength ? result : subLength;//这其实就是min(subl,reault),而result初始为无限大
//长度收集完成后,i起始位置开始往后移动一位,sum也会改变
sum = sum -nums[i];
i++;//区间减一,i加1
}
return result == INT32_MAX ? 0 : result;//输出最后的最小的长度
}
总结
从day1的移除元素 到今天输出数组平方后要有序和 输出长度最小的子数组,都使用了双指针法,可想而知在数组里,这种方法十分常见。
但刚刚初学cpp的我,对算法流程不熟悉,先学一遍,再刷刷题才能进入下一场的练习。
代码随想录训练营day 2 |977有序数组的平方 209.长度最小的子数组 (C++)的更多相关文章
- 代码随想录第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
2022/09/22 第二天 第一题 这题我就直接平方后排序了,很无脑但很快乐啊(官方题解是双指针 第二题 滑动窗口的问题,本来我也是直接暴力求解发现在leetCode上超时,看了官方题解,也是第一次 ...
- Java实现 LeetCode 209 长度最小的子数组
209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = ...
- 【LeetCode】209. 长度最小的子数组
209. 长度最小的子数组 知识点:数组:前缀和:二分法:双指针:滑动窗口 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小 ...
- LeetCode977. 有序数组的平方
问题:977. 有序数组的平方 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,1 ...
- leetcode-977. 有序数组的平方
leetcode-977. 有序数组的平方 (来自 120周赛) 题意 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1 ...
- LeetCode 209. 长度最小的子数组(Minimum Size Subarray Sum)
题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums ...
- 领扣-209 长度最小的子数组 Minimum Size Subarray Sum MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Leetcode 209.长度最小的子数组 By Python
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums = [2, ...
- 977. Squares of a Sorted Array有序数组的平方
网址:https://leetcode.com/problems/squares-of-a-sorted-array/ 双指针法 把左端的元素和右端的元素比较后挑出绝对值大的,将其平方放入ans中,并 ...
- LeetCode 977. Squares of a Sorted Array (有序数组的平方)
题目标签:Array 题目给了我们一组 从小到大的 integers,让我们平方数字 并且 也排序成 从小到达. 因为有负数在里面,平方后,负数在array的位置会变动. 可以设left 和 righ ...
随机推荐
- 期望与概率 dp
期望与概率 dp \(\text{By DaiRuiChen007}\) I. [洛谷4316] - 绿豆蛙的归宿 \(\text{Link}\) 思路分析 DAG 上做期望 dp,可以爆搜,也可以拓 ...
- C Primer Plus (6.16) 編程練習
/*C Primer Plus (6.15) 6*/ 1 #include<stdio.h> 2 int main() 3 { 4 int i,j; 5 for(int i=0;i< ...
- C++Vector源码解析(侯捷STL)
vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新的元素.vector的实现技术,关键在于对大小的控制以及重新配置时的数据移动效率. 一.vector的数据结构 vector采 ...
- ClickHouse(12)ClickHouse合并树MergeTree家族表引擎之AggregatingMergeTree详细解析
目录 建表语法 查询和插入数据 数据处理逻辑 ClickHouse相关资料分享 AggregatingMergeTree引擎继承自 MergeTree,并改变了数据片段的合并逻辑.ClickHouse ...
- Node.js学习笔记----day01
认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.Node.js的简介 Node.js是什么 (1)Node.js不是一门语言 (2) Node.js也不是库,也不是框架 (3)Node. ...
- 浅谈Python中的包
浅谈Python中的包 Package的定义(你以为的) 你在很多的地方都能看到关于package的定义:在Python中在当前目录下有__init__.py文件的目录即为一个package. 嗯,包 ...
- ATM购物车大作业
项目开发流程 1.需求分析:品经理与架构师,根据客户的需求,理出一套比较容易编写的流程 2.架构设计:架构师根据具体的业务需求选择 具体的开发编程语言与项目框架,所需要的数据库(主库,从库).与开发目 ...
- 使用brew安装历史版本的几种方式
背景 在 mac osx 下, 大部分的软件都是使用 homebrew 进行管理的, 可以方便的进行软件的安装,更新,删除等等, 大部分情况下 homebrew 的仓库只会存在一份最新的软件版本, 有 ...
- The Missing Semester - 第二讲 学习笔记
第二讲 Shell 工具和脚本 课程视频地址: https://www.bilibili.com/video/BV1Vv411v7FR 本机学习使用平台:虚拟机ubuntu18.04.6 主题一:Sh ...
- Zstack私有云平台运行实践
很高兴昨天加了大名鼎鼎的杰杰站长的微信,系统运行的怎么样,一定不能只是给力两个字完事,下面就上具体的: 经过这几年的运行费和预研经费的支持,组里除了在线的几台服务器外,慢慢离线也积攒了几台用作调试和做 ...