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. Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式

    Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式 安装包下载 官网首页:https://zookeeper.apache.org/ 历史版本下载地址:http://a ...

  2. 高并发解决方案orleans实践

    开具一张图,展开来聊天.有从单个服务.consul集群和orleans来展开高并发测试一个小小数据库并发实例. 首先介绍下场景,创建一个order,同时去product表里面减掉一个库存.很简单的业务 ...

  3. 洛谷P1048 典型01背包问题

    写在前面的话 蒟蒻在学习诸多图论算法之前,实际上没学过dp! 强说是学过也是只学了01背包,今天就来温习一下-- DP是啥? 动态规划(Dynamic Programming,DP)是运筹学的一个分支 ...

  4. DOM的操作(增删改查)

    操作DOM的核心就是增删改查 目录 一.节点创建型API 1.1 createElement 1.2 createTextNode 1.3 cloneNode 1.4 createDocumentFr ...

  5. 新下载了一个框架,然后npm install时候报错npm ERR! Maximum call stack size exceeded

    今天遇到这个npm ERR! Maximum call stack size exceeded报错 解决方案如下: 1.更新npm版本 //查看版本 npm -v //更新 npm install - ...

  6. 创建进程的多种方式、多进程实现TCP并发等知识点

    创建进程的多种方式.多进程实现TCP并发等知识点 一.同步与异步 1.提交完成任务之后原地等待任务的返回结果,期间不做任何事 2.提交完任务之后不愿原地等待任务的返回结果,直接去做其他事情,有结果自动 ...

  7. SQLSERVER 的 truncate 和 delete 有区别吗?

    一:背景 1. 讲故事 在面试中我相信有很多朋友会被问到 truncate 和 delete 有什么区别 ,这是一个很有意思的话题,本篇我就试着来回答一下,如果下次大家遇到这类问题,我的答案应该可以帮 ...

  8. python字符串表达式求值

    背景: 在开发的过程中涉及到动态的根据公式计算数值 技术上选择了python a= eval("1+2*(3+1)") print(a)

  9. Java-Integer好大一坑,一不小心就掉进去了

    遛马少年,一个代码写的很6的程序员,专注于技术干货分享 最近,在处理线上bug的时候,发现了一个奇怪的现象 业务代码大概是这样的 public static boolean doSth(Integer ...

  10. 一个容器,但是一整个k8s集群

    你可能需要一个快速启动和销毁的 k8s 集群:你可能在资源受限的环境中运行 k8s 集群:你可能是一个完全的初学者,觉得搭建完整的 k8s 套件太难.那么这篇短文可能可以帮到你. 各种丐版 k8s 集 ...