【Leetcode60天带刷】day02—— 977.有序数组的平方、209.长度最小的子数组、 59.螺旋矩阵II

news/2024/10/18 9:26:18/


题目:997.有序数组的平方

Leetcode原题链接:997.有序数组的平方——力扣


 思考历程与知识点: 

题目的意思很简单,就是把每个数的平方,按从小到大的顺序排个序,再输出出来。

第一想法是先每个数平方一遍,用sort()函数排序一步到位。但是这道题用sort时间复杂度很高,主要考查的是对双指针的理解,所以两种方法都做一遍吧。

为什么选用双指针做法:因为原来的数组是有序的,并且可以有负数,所以平方之后最大值要么在最左边,要么在最右边,在左右两端放两个指针,依次比较排序,就可以得到排好的数组啦


 题解:

1、用 sort() 一步到位法:

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {vector<int> res;for(int i : nums) res.push_back(i * i);sort(res.begin(),res.end());return res;}
};

2、双指针法

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {vector<int> res;int l = 0, r = nums.size()-1;while(r >= l){if(nums[l] * nums[l] >= nums[r] * nums[r]) {res.push_back(nums[l]*nums[l]);l++;}else {res.push_back(nums[r]*nums[r]);r--;}}reverse(res.begin(),res.end());return res;}
};

题目:209. 长度最小的子数组

Leetcode原题链接:力扣


思考历程与知识点: 

题目最后一句的进阶,相当于是提示有O(n)的解法,也有O(n log(n))的解法。

但是,O(n)复杂度是小的那个,进阶反而要设计一个复杂度更大的,一般都应该反着来的,复杂度越小越好啊。所以题目是想引导我们思考别的解题方式。

那就先想想O(n)。第一反应,前缀和。想了想,确实就是O(n)的解法。

至于O(n log(n)),其实是滑动窗口,就像一只毛毛虫,从这个长长的数组上爬过去,身子下面的数字和如果小了,那其他位置不动,就头往前探探,多加几个数字,如果大了,那尾巴就收回来一点,少加几个数字。根据这个原则,毛毛虫爬完一趟,就知道最短的区间长度是多少了。(奇妙の比喻hhh)


题解:

class Solution {
public:int minSubArrayLen(int s, vector<int>& nums) {int l = 0, r = 0,sum = nums[0];int len = INT_MAX;while( 1) {if(sum < s && r+1 < nums.size()) {r++;sum=sum + nums[r];}else if(sum >= s){if(len > r - l + 1)len = r - l + 1;sum=sum - nums[l++];}else{break;}}if(len == INT_MAX)len = 0;return len;}
};

题目:59.螺旋矩阵 II

Leetcode原题链接:59. 螺旋矩阵 II


 思考历程与知识点: 

 看起来有点复杂。今晚应该写不完,明天在写。

(待续)


欢迎点赞,收藏,评论,你的鼓励就是我创作的最大动力!(๑╹◡╹)ノ"""

版权声明:本文为CSDN博主「渡梦酒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:渡梦酒的博客_CSDN博客-csdn领域博主


http://www.ppmy.cn/news/86561.html

相关文章

关系数据库设计理论

关系数据库设计理论 目录 关系数据库设计理论是什么函数依赖完全函数依赖(Full Functional Dependency)部分函数依赖(Partial Functional Dependency)传递函数依赖(Transitive Functional Dependency) 异常插入异常(Insertion Anomaly)更新异常(Update Anomaly)删除异常(Deleti…

03 面向对象(多态,接口)

如果要求程序员必须在某个类中特定的方法中实现一个特定的功能, 应该如何实现? 使用抽象方法或者使用接口(interface) 抽象方法只能单继承,不能多继承,子类必须使用里面的抽象方法 接口可以多继承,实现类必须重写里面的方法 接口的作用? 接口是一种约定的规范,体现了规范…

设计模式-简单Demo掌握责任链模式

文章目录 1、要点2、Demo3、进阶掌握 参考文章&#xff1a; 基本原理&#xff1a;责任链模式 | 菜鸟教程 (runoob.com) 简单例子&#xff1a;五分钟学设计模式.12.责任链模式_哔哩哔哩_bilibili 阿里巴巴的应用&#xff1a;责任链模式在复杂数据处理场景中的实战 责任链模式&am…

森林大侠

树林里有一棵生了病的大树&#xff0c;无精打采&#xff0c;眉头紧锁&#xff0c;低垂着头&#xff0c;眼睛里不停地落下哀伤的泪水。它的叶子&#xff0c;从枯黄&#xff0c;到枯萎&#xff0c;再到纷纷落下&#xff0c;好像已经生病了很久。 一只啄木鸟正好从树林的上空飞过&…

离散数学_十章-图 ( 2 ):图的术语和几种特殊的图

&#x1f4f7;10.2 图的术语和几种特殊的图 1. 基本术语1.1 邻接&#xff08;相邻&#xff09;1.2 邻居1.3 顶点的度1.4 孤立点1.5 悬挂点例题 2. 握手定理3. 握手定理的推论4. 带有有向边的图的术语4.1 邻接4.2 度——出度 和 入度4.3 例题&#xff1a; 5. 定理&#xff1a;入…

基于redis客户端缓存机制实现本地缓存

文章目录 前言一、本地缓存和分布式缓存二、redis客户端缓存机制1.客户端缓存实现原理普通模式广播模式重定向模式redirect 2.优势和误区3.客户端缓存机制请求流程 三、项目实战1.引入依赖2.redis连接属性配置3.开启客户端缓存4.使用本地缓存5.测试 总结 前言 采用缓存一直是我…

ChatGPT实战100例 - (11) 零成本学习Python

文章目录 ChatGPT实战100例 - (11) 零成本学习Python一、需求与思路二、培训大纲三、开始秀四、Python 简介1、Python 的发展历史2、Python 的特点与优势3、 Python 的应用领域四、 总结ChatGPT实战100例 - (11) 零成本学习Python 一、需求与思路 用ChatGPT列一个培训大纲, …

手写红黑树

基于C构造一个红黑树 参考代码一&#xff1a; 以下是一个简单的C实现&#xff0c;展示了如何手写一个红黑树&#xff1a; #include <iostream>using namespace std;// 节点结构体 struct Node {int val;bool isRed;Node* left;Node* right;Node(int v):val(v), isRed(…