代码随想录训练营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 ...
随机推荐
- 将xlsx列表文件转为md列表
转换网站: https://tableconvert.com/ 在这篇文章中,我将告诉你如何快速的将Excel转换为markdown表格,以及如何将Google Docs,Numbers,网页中的表格 ...
- UOJ60.【UR #5】怎样提高智商
简要题意 谜题集中有 \(n\) 个谜题,第 \(i\) 个谜题形如: \(i.\) 编号小于 \(i\) 的题目中你选择了几个 \(h_i\)? A. \(a_i\) B. \(b_i\) C. \ ...
- npm 中设置环境NODE_ENV变量,判断失败打印process.env.NODE_ENV确实是"development",但是判断process.env.NODE_ENV === "development" 是false
通过package.json 的scripts脚本 修改NODE_ENV的值来区分开发环境和生产环境. "scripts": { "build": " ...
- JavaScript 文件上传
一.普通文件上传 JavaScript 可以使用表单提交来实现文件上传.首先,在 HTML 中创建一个文件输入框: <input type="file" id="f ...
- 顶层QWidget弹窗设置背景为透明,透明部分为黑色。
setAttribute(Qt::WA_TranslucentBackground); 设置此属性,解决.
- 【随笔记】FRAM 铁电随机存储器(MB85RC04VPNF)
参考资料 器件规格书:https://atta.szlcsc.com/upload/public/pdf/source/20131104/1457706659695.pdf I2C总线规范:https ...
- 用GC的策略,管理团队的技术债务
在数字化时代,每一个组织的经营都是建立在数字化的系统之上的,而数字化系统的构建,必然就会带来技术债务,这是每一个数字化团队都要面临的一个问题,如何有效的管控技术债务. 技术债务的产生,是技术团队不断迭 ...
- vue3 h函数 h() 生成 element-plus vnode
vue3的h函数和vue2的h函数入参不同 下面是vue2的vnode示范 然后是vue3的错误示范 下面是正确示范 let open1=() => { return new Promise(( ...
- Vite 配置别名 vue3 项目
官方文档还是有点难懂,然后点链接找到了 https://github.com/rollup/plugins/tree/master/packages/alias#entries // rollup.c ...
- 移除链表元素&反转链表&设计链表
一.移除链表元素 203.移除链表元素 leetcode链接 1.方法概述 带傀儡节点的方法: 创建一个傀儡节点puppet来充当该链表的假头节点,当真正的头结点head不为null时,且在真正的头节 ...