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++)的更多相关文章

  1. 代码随想录第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    2022/09/22 第二天 第一题 这题我就直接平方后排序了,很无脑但很快乐啊(官方题解是双指针 第二题 滑动窗口的问题,本来我也是直接暴力求解发现在leetCode上超时,看了官方题解,也是第一次 ...

  2. Java实现 LeetCode 209 长度最小的子数组

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

  3. 【LeetCode】209. 长度最小的子数组

    209. 长度最小的子数组 知识点:数组:前缀和:二分法:双指针:滑动窗口 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小 ...

  4. LeetCode977. 有序数组的平方

    问题:977. 有序数组的平方 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,1 ...

  5. leetcode-977. 有序数组的平方

    leetcode-977. 有序数组的平方 (来自 120周赛) 题意 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1 ...

  6. LeetCode 209. 长度最小的子数组(Minimum Size Subarray Sum)

    题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums ...

  7. 领扣-209 长度最小的子数组 Minimum Size Subarray Sum MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. Leetcode 209.长度最小的子数组 By Python

    给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums = [2, ...

  9. 977. Squares of a Sorted Array有序数组的平方

    网址:https://leetcode.com/problems/squares-of-a-sorted-array/ 双指针法 把左端的元素和右端的元素比较后挑出绝对值大的,将其平方放入ans中,并 ...

  10. LeetCode 977. Squares of a Sorted Array (有序数组的平方)

    题目标签:Array 题目给了我们一组 从小到大的 integers,让我们平方数字 并且 也排序成 从小到达. 因为有负数在里面,平方后,负数在array的位置会变动. 可以设left 和 righ ...

随机推荐

  1. C#调用接口的简单流程

    1.编写url地址 string url="http://192.168"; 2.创建http请求对象 HttpWebRequest request = (HttpWebReque ...

  2. 阿里云Imagine Computing创新技术大赛决赛启幕!

    2023年1月,由阿里云与英特尔主办,阿里云天池平台.边缘云.视频云共同承办的"新算力 新体验"Imagine Computing创新技术大赛复赛圆满落幕.经过两个多月的激烈角逐, ...

  3. SSM框架——MyBatis

    Mybatis 1.Mybatis的使用 1.1给项目导入相关依赖 我这里有几个下载好的依赖包提供给大家 点我下载--junit4.13.2 点我下载--maven3.8.1 点我下载--mybati ...

  4. 加速 Document AI (文档智能) 发展

    在企业的数字工作流中充满了各种文档,包括信件.发票.表格.报告.收据等,我们无法自动提取它们的知识.如今随着文本.视觉和多模态人工智能的进步,我们有可能解锁这些知识,这篇文章向你展示了你的团队该如何使 ...

  5. vue中wowjs的使用

    笔者亲测,在vue中使用wow.js如果不按照以下方法实施,会出现意想不到的BUG,网页刷新后图片就全部突然看不到了,被增加了一个隐藏属性,建议大家严格按照方法执行,不要随意使用 (1)通过npm安装 ...

  6. js获取时间最详细~~~~

    最详细 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  7. Mybatis理解

    MyBatis学习及理解 1.Mybatis简介 MyBatis是一款优秀的持久层框架,他支持定制化SQL文件.存储过程以及高级映射.避免了JDBC代码和手动设置参数以及获取结果集,Mybatis可以 ...

  8. 在腾讯云上创建一个玩具docker-mysql数据服务

    有时候开发需求会自己做一下测试数据,在自己电脑本地安装的服务多了电脑环境会搞的很乱,这时使用云服务器安装个docker服务是一个不错的寻找. 下面步骤是在腾讯云上安装docker-mysql镜像,并导 ...

  9. 【学习笔记】XR872 GUI Littlevgl 8.0 移植(显示部分)

    LVGL 介绍 官方网站:LVGL - Light and Versatile Embedded Graphics Library 源码位置:GitHub - lvgl/lvgl: Powerful ...

  10. FLASH-CH32F103替换STM32F103 FLASH快速编程移植说明

    因CH32F103 相对于STM32F103 flash 操作多了快速编程模式,该文档说明主要目的是为了方便客户在原先ST 工程的基础上实现flash 快速编程模式的快速移植. 1.在stm32f10 ...