代码随想录day2:数组part02(有序数组的平方 ,长度最小的子数组 ,螺旋矩阵II,数组章节总结)

数组part02

一、有序数组的平方

法一:暴力,先把每个元素平方再排序,时间复杂度O(n + nlogn)

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {for(int i=0;i<nums.size();i++) nums[i]*=nums[i];sort(nums.begin(),nums.end());return nums;}
};

法二:双指针,时间复杂度O(n)

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int k=nums.size()-1;vector<int> res(nums.size(),0);for(int i=0,j=nums.size()-1;i<=j;){if(nums[i]*nums[i]<nums[j]*nums[j]){res[k--]=nums[j]*nums[j];j--;}else{res[k--]=nums[i]*nums[i];i++;}}return res;}
};

二、长度最小的子数组

法一:暴力,时间复杂度:O(n^2),空间复杂度:O(1)

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int res=INT32_MAX; // 最终结果int sum=0; // 子序列的数值之和int subLength=0; // 子序列长度for(int i=0;i<nums.size();i++){sum=0;for(int j=i;j<nums.size();j++){sum+=nums[j];if(sum>=target){subLength=j-i+1;res=res<subLength?res:subLength;break;}}}return res==INT32_MAX?0:res; }
};

法二:滑动窗口,时间复杂度:O(n),空间复杂度:O(1)

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int res=INT32_MAX;int i=0; // 滑动窗口起始位置int sum=0; // 窗口内元素的和for(int j=0;j<nums.size();j++){sum+=nums[j];while(sum>=target){int subLength=j-i+1; // 取子序列长度res=res<subLength?res:subLength;sum=sum-nums[i];i++; // 更新i,以保证取的长度最小}}return res==INT32_MAX?0:res;}
};

为什么时间复杂度是O(n)。
不是for里放一个while就是O(n^2), 主要是看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。

三、螺旋矩阵II

类似二分的思想,控制循环不变量,维护的区间始终为左闭右开
时间复杂度 O(n^2): 模拟遍历二维矩阵的时间
空间复杂度 O(1)

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n,vector<int>(n,0)); // 初始化一个二维数组int startx=0,starty=0; // 定义每循环一个圈的起始位置int loop=n/2; // 有几个圈int mid=n/2; // n为奇数时的矩阵的中间位置int offset=1; // 需要控制每条边的遍历长度,每循环一圈右边界就收缩一位int count=1; // 用来给矩阵中每一个空格赋值int i,j;while(loop--){i=startx;j=starty;// 下面四个for循环就是模拟转了一圈// 模拟填充上行从左到右(左闭右开)for(;j<n-offset;j++) res[i][j]=count++;// 模拟填充右列从上到下(左闭右开)for(;i<n-offset;i++) res[i][j]=count++;// 模拟填充下行从右到左(左闭右开)for(;j>startx;j--) res[i][j]=count++;// 模拟填充左列从下到上(左闭右开)for(;i>startx;i--) res[i][j]=count++;// 下一圈开始后,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)startx++;starty++;// offset 控制每一圈里每一条边遍历的长度offset++;}// 若n为奇数,最后还需要给矩阵的中心单独赋值if(n%2) res[mid][mid]=count;return res;}
};

四、数组章节总结

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

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

相关文章

Domino自带应用免费开源,免费共享

大家好&#xff0c;才是真的好。 作为一个强大的、综合性的、高安全的企业级应用平台&#xff0c;Domino同时也拥有业界首屈一指的应用程序开发能力。不过&#xff0c;让Domino有强大竞争力的&#xff0c;也应该包含它自带的数十个开箱即用的Notes应用程序。 我在前面很多篇幅…

JavaScript-BOM-笔记

1.页面加载 一般情况:先写标签,再写js 页面加载:可以实现先写js代码 再写标签 window.onload = function(){ js代码 } 只能写一次,如果多次以最后一次为准 window.addEventListener(load,function(){ 代码 }) 使用多次 window.onload = function () { console.log(doc…

c++的this指针

this指针是c类中的概念&#xff0c;this英文翻译是这&#xff0c;这个&#xff0c;其实在类中就是这个意思。 this指针的使用 this指针主要用于类中的非静态成员方法&#xff0c;在这些方法中&#xff0c;this指针就指向当前调用此方法的这个对象。 1. this的使用场景一: 当…

2024年人工智能有哪些证书可以报考呢?

由国家工信部权威认证的人工智能证书是跨入人工智能行业的敲门砖&#xff0c;随着人工智能技术的发展越来越成熟&#xff0c;相关的从业人员也会剧增&#xff0c;证书的考取难度也会变高。如果已经从事或者准备从事人工智能行业的人员&#xff0c;对于考证宜早不宜迟&#xff0…

数据库软件详解一

MySQL 的安装 MySQL 的安装可去参考下这篇文章&#xff0c;比较详细&#xff0c;在此就不多啰嗦了&#xff01; MySQL 的卸载 如果你并不是第一次安装 MySQL &#xff0c;或者安装 MySQL 不对&#xff0c;需要将 MySQL 卸载干净才能将下一个版本的 MySQL 安装成功 卸载步骤 …

Javaweb之SpringBootWeb案例开发规范的详细解析

1.2 开发规范 了解完需求也完成了环境搭建了&#xff0c;我们下面开始学习开发的一些规范。 开发规范我们主要从以下几方面介绍&#xff1a; 1、开发规范-REST 我们的案例是基于当前最为主流的前后端分离模式进行开发。 在前后端分离的开发模式中&#xff0c;前后端开发人员…

uniapp 设置底部导航栏

uniapp 设置原生 tabBar 底部导航栏。 设置底部导航栏 一、创建页面&#xff0c;一定要在 pages.json 文件中注册。 二、在 pages.json 文件中&#xff0c;设置 tabBar 配置项。 pages.json 页面 {"pages": [...],"globalStyle": {...},"uniIdRout…

Flex布局--常用好用

1.什么是Flex布局&#xff1f; flex 是 flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性&#xff0c;任何一个容器都可以 指定为 flex 布局。 当我们为父盒子设为 flex 布局以后&#xff0c;子元素的 float、clear 和 ve…

地推拉新任务管理助手程序开发

拉新地推任务管理分销助手程序开发&#xff0c;旨在为企业提供一套专业、高效的管理工具&#xff0c;以优化地推任务分配、提高销售业绩。 以下是该程序的核心功能说明&#xff1a; 任务管理模块&#xff1a;允许管理员创建、分配和管理地推任务。管理员能够精确地指派任务给…

java返回文件时为图片或pdf等设置在线预览或下载

设置Content-Disposition响应头类型 "inline"查看预览 &#xff1b; "attachment"下载&#xff1b; inline&#xff1a;表示回复中的消息体会以页面的一部分或者整个页面的形式展示 attchment&#xff1a;以附件形式被下载到本地&#xff1b;/*** 文件或图…

[Android自定义View]实现一个环形进度条控件

[Android View]实现一个环形进度条 导言 之前的文章里我们已经介绍了自定义View相关的知识了&#xff0c;本篇文章我们就来实战一下&#xff0c;从零到一&#xff0c;实现一个环形进度条的控件。 具体实现 大体框架 我们说过&#xff0c;如果要实现一个自定义控件的话一般有…

JavaScript系列——Promise

文章目录 概要Promise三种状态状态改变Promise链式调用Promise处理并发promise.all()promise.allSettled&#xff08;&#xff09;Promise.any()promise.race() 小结 概要 Promise中文翻译过来就是承诺、预示、有可能的意思。 在JavaScript里面&#xff0c;Promise 是一个对象…

是什么因素让 PLC 比单片机更可靠?单片机为何不能做到这些?

PLC&#xff08;可编程逻辑控制器&#xff09;和单片机&#xff08;微控制器&#xff09;在工业控制和自动化领域中都扮演着重要的角色&#xff0c;但它们在设计、性能和应用方面有显著的不同&#xff0c;这些差异导致PLC在某些方面比单片机更可靠&#xff1a; 环境适应性和耐用…

C语言课程设计之好友通讯录系统项目实现

好友通讯录系统项目实现 程序使用软件visual Studio 2022&#xff1b; 文章目录 好友通讯录系统项目实现题目描述分析与设计代码实现 题目描述 建立一个通讯录&#xff0c;可以对通讯录中的好友信息进行增加、删除、修改、查找以及对通讯录中的好友信息进行显示打印&#xff0…

软件测试|解析selenium.common.exceptions.ElementClickInterceptedException错误及解决方法

导言 在自动化测试中&#xff0c;Selenium是一个广泛使用的工具&#xff0c;用于模拟用户在网页上的操作。然而&#xff0c;有时候在执行点击操作时&#xff0c;可能会遇到ElementClickInterceptedException异常&#xff0c;这可能是由于多种原因导致的。本文将深入探讨这个错…

【算法练习】leetcode算法题合集之数组和哈希表篇

重建数组&#xff08;高频&#xff09; LeetCode283.移动零 LeetCode283.移动零 双指针&#xff0c;记录已经处理好的序列的尾部 class Solution {public void moveZeroes(int[] nums) {int k 0;for (int i 0; i < nums.length; i) {if (nums[i] ! 0) {swap(nums, i, k)…

JavaScript 异步编程解决方案-上篇

1、JavaScript 异步编程 1、传统的方案 :JavaScript 中的异步操作函数往往通过回调函数来实现异步任务的结果处理 场景:fs 文件操作 数据库操作 AJAX 定时器 eg: 1、setTimeout 函数 //异步回掉,通过函数回调解决function printInfo() {document.getElementsByTagName(d…

Kafka的简介及架构

目录 消息队列 产生背景 消息队列介绍 常见的消息队列产品 应用场景 消息队列的消息模型 Kafka的基本介绍 简介 Kafka的架构 Kafka的使用 Kafka的shell命令 Kafka的Python API的操作 完成生产者代码 完成消费者代码 消息队列 产生背景 消息队列:指数据在一个容器…

Linux学习记录——삼십팔 网络层IP协议

文章目录 1、了解IP协议2、IP协议报文1、8位服务类型2、16位总长度&#xff08;字节数&#xff09;3、8位生存时间&#xff08;TTL&#xff09; 3、网段划分1、网段划分和CIDR方案2、子网划分简单方法3、IP地址问题的解决方案 4、公网内网1、内网分配2、运营商管理方法 5、路由…

【Python基础】一文搞懂:Python 中 Excel 文件的写入与读取

文章目录 1 引言2 使用 openpyxl2.1 安装 openpyxl2.2 写入 Excel 文件2.3 读取 Excel 文件 3 使用 pandas3.1 安装 pandas 和 openpyxl3.2 写入 Excel 文件3.3 读取 Excel 文件 4 实例演示4.1 安装所需库4.2 封装为excel_example.py脚本文件 5 注意事项6 总结 1 引言 在现代办…