【代码随想录】刷题Day2

news2024/9/23 5:34:20

1.左右指针比大小

 977. 有序数组的平方

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> ret = nums;
        int left = 0;
        int right = nums.size()-1;
        int end = nums.size();
        while(left<=right)
        {
            if(abs(nums[left])>abs(nums[right]))
            {
                ret[--end]=nums[left]*nums[left];
                left++;
            }
            else
            {
                ret[--end]=nums[right]*nums[right];
                right--;
            }
        }
        return ret;
    }
};

1.由于其数组本身的特性,两边的绝对值大,中间的小;说明其实数组可以由两边向中间走

2.由此,我们想到了左右指针,不过在遍历时要确定区间范围

3.定义一个vector ret存储平方数

3.比较哪个的绝对值大,哪个就被去拿去填入ret的左边往右边位置

2.滑动窗口

209. 长度最小的子数组

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum=0;
        int ret = nums.size()+1;
        for(int i=0;i<nums.size();i++)
        {
            for(int j=i;j<nums.size();j++)
            {
                sum = 0;
                for(int k=i;k<=j;k++)
                {
                    sum+=nums[k];
                }
                if(sum>=target&&ret>(j-i+1))
                {
                    ret=j-i+1;
                }
            }
        }
        if(ret==(nums.size()+1))
            return 0;
        return ret;
    }
};

1.两层循环嘛,最简单的暴力遍历,非说要哪里注意的话,也就sum记得在每次重新开始前置为零

2.不过,这个代码leedcode跑不过,原因就是太暴力了,O(N^2)的时间复杂度不过呢

3.仔细分析一下为什么我们浪费了这么多的时间:仔细想想其实很简单,就是我们站得角度是顺序思考的,不就是求解嘛,一个一个对过去,这种思想使得我们不需要考虑直接暴力遍历;此时我们需要逆转一下思维(異議あり!,不好意思幽默一下),如果我们站在已经得到某个数组的条件满足要求,那么我们只需要去判断到底怎么样更小就行

转个场~

 滑动窗口

思想:

1.我们是通过两个下标i和j确定区间的,但是我们首先要做的不再是遍历去凑满足大于等于target的数组;而是先去得到一个满足要求的区间比较大的数组,随后去减小其区间更新返回值

2.因为说先得到个满足要求区间比较大的数组,所以i不动,j先往前,sum得到大于等于target,返回区间,随后走i,找到这么个比较大的数组里适合的最小区间。随后j继续往前走,i根据sum是否还满足要求在进行缩减

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum = 0;
        int ret = nums.size()+1;
        int i = 0;
        for(int j=0;j<nums.size();j++)
        {
            sum+=nums[j];
            while(sum>=target)
            {
                if(ret>(j-i+1))
                {
                    ret=(j-i+1);
                }
                sum-=nums[i++];
            }
        }
        if (ret == (nums.size() + 1))
            return 0;
        return ret;
    }
};

分析:

这个的时间复杂度是O(N),因为j了全长,限制了其量级,就算i也走完了全长,也就是N->2N而已。

3.讨厌的循环

59. 螺旋矩阵 II

c++这个vector<vector<int>>我构造了十来分钟,烦得很。

注意是:vector<vector<int>> ret(n, vector<int>(n, 0))

它不像数组弄个[]就能出来,需要去调用构造函数,个数和需要的数据构造

这里两个方法都可以,不过后面那个的i和j更需要看范围

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        int i = 0;
        int j = n-1;
        int k = 0;
        int num = 0;
        vector<vector<int>> ret(n, vector<int>(n, 0));
        while(i<=j)
        {
            k=i;
            while(k<=j-1)
                ret[i][k++]=(++num);
            k=i;
            while(k<=j-1)
                ret[k++][j]=(++num);
            k=j;
            while(k>=i+1)
                ret[j][k--]=(++num);
            k=j;
            while(k>=i+1)
                ret[k--][i]=(++num);
            i++;
            j--;
        }
        if(n%2==1)
        {
            ret[(n-1)/2][(n-1)/2]=(++num);
        }
        return ret;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/440236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue-element-admin-master编译异常记录

前言 最近一直在往大前端的方向转&#xff0c;不得不说前端的知识架构还真的很庞大&#xff0c;一步一个脚印吧&#xff0c;之前消化完极简版后台项目[vue-admin-template-master]后&#xff0c;开始想看下完整版的后台[vue-element-admin-master]项目&#xff0c;奈何clone项…

ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图

文章目录 ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图一、需求与思路二、SQL建表三、绘制四、 总结 ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图 一、需求与思路 在你还在手撸SQL&#xff1f;ChatGPT笑晕在厕所 这篇博文中 针对经典3表设计&#xff1a; 学生表 S…

【我在CSDN成长】我的两周年创作纪念日

【我在CSDN成长】我的两周年创作纪念日 一、来到CSDN的大家庭二、在CSDN的收获1.在CSDN的感受2.在CSDN的收获 三、在CSDN的未来规划憧憬 一、来到CSDN的大家庭 当看到这个信息时&#xff0c;才发现不知不觉已经在CSDN创作两年了&#xff0c;今天才腾出时间来写下这篇博文。感叹…

绕开坑坑,申请高德地图安卓appKey的步骤

在申请高德地图 appkey的时候&#xff0c;我们会采用keytool的方法来生成sha1码。这里面有坑&#xff0c;请看 PS C:\Users\cuclife.android> keytool -v -list -keystore keystore keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore java.lang.Exception: 密…

涨点技巧:IOU篇---Yolov5/Yolov7引入WIoU,SIoU,EIoU,α-IoU

1.IOU介绍 IoU其实是Intersection over Union的简称,也叫‘交并比’。IoU在目标检测以及语义分割中,都有着至关重要的作用。 首先,我们先来了解一下IoU的定义: 我们可以把IoU的值定为为两个图形面积的交集和并集的比值,如下图所示: 1.1 Yolov5自带IOU方法 GIoU, DIoU,…

Kubernetes(k8s 1.23.17) 基于docker 一主两从集群环境搭建

结合网上资料&#xff0c;利用k8s最后直接支持docker的版本1.23.17搭建&#xff0c;并本地验证完成。 1 虚拟机准备 1.1 规划 系统角色/hostnameIP地址配置CentOS 7.9 &#xff08;需要7.5&#xff09;master192.168.68.1002Core、4G内存、40GB磁盘CentOS 7.9 &#xff08;需…

一篇文章告诉你,为什么移动数据捕获对运输物流公司很重要?

随着世界走向数字化和智能手机的使用增加&#xff0c;移动数据采集正在成为大多数行业的新常态。航运物流也不例外。从捕获详细的订单和交付信息到跟踪货运和仓库位置&#xff0c;条形码技术用于运输物流世界的每一步。通过智能数据采集&#xff0c;运输和物流公司可以获得更好…

camunda的service task如何使用

在 Camunda 中&#xff0c;使用 Service Task 节点可以执行各种类型的业务逻辑&#xff0c;例如计算、数据转换、数据格式化等。在 Service Task 节点中&#xff0c;可以使用不同的编程语言来实现业务逻辑&#xff0c;例如 Java、JavaScript、Python 等。 下面是使用 Java 实现…

生产制造企业如何建立适合自身的数字化工厂,实现数字化转型?

“工业4.0”这一全新的术语受到全球的瞩目&#xff0c;它是继机械化、电气化和信息技术之后&#xff0c;以智能制造为核心的第四次工业革命。“工业4.0”最显著的特征是智能工厂的广泛普及。而智能工厂是在数字化工厂的基础上发展而来的&#xff0c;没有数字化就没有智能化。因…

如何在低代码平台上构建ERP软件

ERP软件是企业管理日常运营需求的关键组件。然而&#xff0c;对于许多企业&#xff0c;尤其是资源有限的企业来说&#xff0c;尝试构建和管理ERP平台可能要担负较高的成本的。幸运的是&#xff0c;低代码平台可以使这个过程变得容易得多。今天我们来解释如何在低代码平台上构建…

【IDEA】数据湖 Hudi 0.12.0 基础使用

文章目录 创建 Maven 项目插入数据查询数据更新数据增量查询删除数据 前言 集群系统&#xff1a;CentOS 7.5 服务器信息&#xff1a; 服务器角色IPhadoop104服务器Master192.168.0.104hadoop105服务器Slave1192.168.0.105hadoop106服务器Slave2192.168.0.106 使用的组件版本…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题977有序数组的平方) 2023.4.20

目录 前言算法题&#xff08;LeetCode 977有序数组的平方&#xff09;—&#xff08;保姆级别讲解&#xff09;分析题目算法思想&#xff08;重要&#xff09;暴力解法代码&#xff1a;双指针法&#xff08;快慢指针法&#xff09;代码&#xff1a; 结束语 前言 本文章一部分内…

C++ Primer (第五版)-第九章 顺序容器

文章目录 一、概述二、内容9.1、顺序容器概述如何选择合适的容器 9.2、容器库概览迭代器容器类型成员列表初始化赋值和Swap容器的大小关系运算符 9.3 顺序容器操作9.3.1向顺序容器添加元素访问元素删除元素改变容器大小 9.4 Vector 对象如何增长9.5、额外的string 操作9.5.2、改…

【散文诗】单片机运行下和非运行下的 ROM 和 RAM

目录 一、两种处理器的结构体系1. 哈佛结构体系2. 冯诺依曼结构体系3. 两种结构的总结 二、单片机运行下和非运行下的内存分配1. 非运行时的单片机程序在ROM内的分布2. 运行时的单片机程序在RAM内的分布 三、单片机程序和操作系统应用程序的对比四、编译流程 一、两种处理器的结…

Java 8 中使用 Lambda 表达式和 Stream API 解决 LeetCode 的两数之和问题

Java 8 中使用 Lambda 表达式和 Stream API 解决 LeetCode 的两数之和问题 当我们在面对一个数列&#xff0c;需要查找其中两个元素的和为给定目标值时&#xff0c;可以使用两数之和&#xff08;Two Sum&#xff09;问题来解决。这个问题在 LeetCode 上有很高的重要性和普遍性&…

入行IC| 数字IC设计和验证哪个好?(内含薪资对比)

网上有一个很火的问题那就是数字IC设计和验证哪个好&#xff1f;接下来我们从以下几个维度来对比一下这两个岗位。 入行门槛 从上述对比就可以看出&#xff0c;IC设计要比验证门槛高。 具体工作内容有哪些&#xff1f; 数字IC前端设计 1.配合芯片架构的设计&#xff1b;一…

技术干货|直流电源自动测试系统功能介绍

直流电源是一种将交流电转换为恒定电压或电流输出的电子设备。在实际生产生活中&#xff0c;直流电源被广泛应用于各种场合。但由于各种原因&#xff0c;包括工艺、质量等因素&#xff0c;直流电源存在一定的出厂偏差。为了确保直流电源的精度和稳定性&#xff0c;在生产过程中…

layui框架学习(23:代码文本修饰模块)

Layui中的代码文本修饰模块layui.code主要用于修饰代码区域或文本行&#xff0c;其基本用法是使用预设类layui-code标识包含代码或文本的元素&#xff0c;然后调用layui.code函数渲染样式。Layui官网教程及示例中主要使用pre元素包含带修饰的代码或文本&#xff08;pre元素可定…

Myslq架构和原理

这里写自定义目录标题 Myslq体系架构连接层存储引擎 MYSQL原理单表访问连接查询&#xff08;原理&#xff09; Myslq体系架构 连接层 存储引擎 查看日志文件&#xff1a;show variables like ‘log_error’\G; BIN LOG 日志&#xff1a; show variables like ‘log_bin’; MYS…

Leetcode 622. 设计循环队列

文章目录 1.题目描述2.原题链接3.思路分析4.接口实现 &#xff1a;FrontRearenQueue(value):deQueue():isEmpty(): 检查循环队列是否为空isFull():myCircularQueueFree 5.代码实现 1.题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FI…