代码随想录训练营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 ...
随机推荐
- Unix 系统数据文件那些事儿
前言 Unix like 系统和 windows 的最大区别就是有一套标准的系统信息数据文件,一般存放在 /etc/ 目录下,并且提供了一组近似的接口访问和查询信息,这些基础设施让系统管理看起来井井有 ...
- 如何在Github上创建一个新仓库
Hi,欢迎大家在有空的时候做客[江涛学编程],这里是2023年的第6篇原创文章,新年新气象,在这里我祝读者朋友们都好好的, 老规矩,拍拍手,上菜. 今天没有啥东西要跟家人们分享,就两个字,看图!!! ...
- 静态文件相关配置、request请求方法、pycharm连接MySQL、orm
静态文件相关配置.request请求方法.pycharm连接MySQL.orm 风得意马蹄疾,一日看尽长安花 一.静态文件相关配置 1.编写一个登录功能 1.创建一个django项目并创建一个app ...
- 方法的调用-JDK的JShell简单使用
方法的调用 方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法.在 主方法中,直接写要调用的方法名字就可以调用了. public static ...
- immutable.js学习笔记(五)----- Set
一.Set 二.API (一)add:添加值 (二)delete:删除值 注意:删除后的Set是无序的 (三)clear:清空并返回新Set (四)union:N个set合并为一个set (五)int ...
- 11月18日内容总结——同步、异步与阻塞、非阻塞的概念、创建进程的多种方式及multiprocessing模块、进程间的数据隔离和IPC机制(队列)、生产者消费者模型、守护进程、僵尸进程、孤儿进程和多进程错乱问题
目录 一.同步与异步 同步 异步 二.阻塞与非阻塞 阻塞 非阻塞 三.综合使用 1.同步阻塞: 2.同步非阻塞: 3.异步阻塞: 4.异步非阻塞: 四.创建进程的多种方式 进程的创建 multipro ...
- ES的基本语法
1 基本使用 使用kibaba来执行语句 es安装和kibaba安装:https://www.cnblogs.com/jthr/p/17075759.html 1)添加PUT 已存在会直接覆盖 PUT ...
- IDEA插件:lombok
1 安装插件lombok File => Settings => Plugins => Marketplace.在 Marketplace 中搜索 lombok 并安装,安装成功后 ...
- The Missing Semester - 第二讲 学习笔记
第二讲 Shell 工具和脚本 课程视频地址: https://www.bilibili.com/video/BV1Vv411v7FR 本机学习使用平台:虚拟机ubuntu18.04.6 主题一:Sh ...
- print()、转义字符、标识符和保留字、变量、数据类型、类型转换
安装 1.安装对应版本的Python,并进行相应的测试 2.安装对应版本的PyCharm并配置相关的内容 print()函数 输出内容是数字 输出内容是字符串 输出的内容是含有字符串的运算符的表达式 ...