力扣刷题977——有序数组的平方

977. 有序数组的平方

题目:

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

出版作答(python3):

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:nums_sq=[]n=0for i in nums:j=i*inums_sq.append(j)n = len(nums_sq)for i in range(n):for j in range(0, n - i - 1):if nums_sq[j] > nums_sq[j + 1]:nums_sq[j], nums_sq[j + 1] = nums_sq[j + 1], nums_sq[j]return nums_sq

提交的时候超出时间限制。先平方,之后采用手动的冒泡排序,超时。

第二版:

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:nums_sq=[]n=0for i in nums:j=i*inums_sq.append(j)nums_sq.sort()return nums_sq

题目允许调用函数,可以不手写排序,节省时间。

最优版:

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:n = len(nums)result = [0] * nleft, right = 0, n - 1pos = n - 1while left <= right:if abs(nums[left]) > abs(nums[right]):result[pos] = nums[left] ** 2left += 1else:result[pos] = nums[right] ** 2right -= 1pos -= 1return result

双指针法:
双指针从两端找平方最大值,逆序填入新数组。
1、为何逆序插入?
我们从数组两端找最大平方值,大的数应该放在结果数组的最后面,所以我们需要从后往前插入。
最大平方值一定出现在原数组的两端。设置双指针从两端开始比较
创建一个结果数组 result,长度相同,全部初始化为 0。—>result=[0]*n

大致思路:
比较两端绝对值大小:
谁的绝对值大,说明平方后也更大;
将较大的平方放入结果数组的最后一个位置;
创建左右指针:left 指向最左,right 指向最右;移动对应指针(左边大就 left += 1,右边大就 right -= 1);
重复上述过程,直到左右指针相遇。

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

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

相关文章

应用加速游戏盾的安全作用

在数字娱乐产业蓬勃发展的今天&#xff0c;游戏已从单纯的娱乐工具演变为连接全球数十亿用户的社交平台与文化载体。然而&#xff0c;伴随游戏市场的指数级增长&#xff0c;网络攻击的频率与复杂性也呈爆发式上升。从DDoS攻击导致服务器瘫痪&#xff0c;到外挂程序破坏公平竞技…

linux安装zsh,oh-my-zsh,配置zsh主题及插件的方法

这是一份非常详细的指南&#xff0c;带你一步步在 Linux 系统中安装 Zsh、配置主题和安装插件。 Zsh&#xff08;Z Shell&#xff09;是一个功能强大的 Shell&#xff0c;相比于大多数 Linux 发行版默认的 Bash&#xff0c;它提供了更强的自定义能力、更智能的自动补全、更漂亮…

【设计模式系列】策略模式vs模板模式

策略模式是什么&#xff1f;如何定义并封装一系列算法策略模式 (Strategy Pattern)模板模式 (Template Pattern)模板模式与策略模式的深度对比与区分混合使用两种模式的场景策略模式 (Strategy Pattern) 应用场景&#xff1a;当需要根据不同条件选择不同算法或行为时&#xff…

aigc(1.1) opensora-2.0

open sora-2.0相关链接: arxiv链接 huggingface页面 HunyuanVideo VAE open sora2.0的VAE模型复用了HunyuanVideo的3D VAE,HunyuanVideo的arxiv链接。下图来自论文,可见VAE是一个因果注意力的3D结构。在配图左侧,视频会被编码为video token序列,而在配图右侧,去噪的vide…

Linux驱动21 --- FFMPEG 音频 API

目录 一、FFMPEG 音频 API 1.1 解码步骤 创建核心上下文指针 打开输入流 获取输入流 获取解码器 初始化解码器 创建输入流指针 创建输出流指针 初始化 SDL 配置音频参数 打开音频设备 获取一帧数据 发送给解码器 从解码器获取数据 开辟数据空间 初始化内存 音频重采样…

《计算机“十万个为什么”》之 [特殊字符] 序列化与反序列化:数据打包的奇妙之旅 ✈️

《计算机“十万个为什么”》之 &#x1f4e6; 序列化与反序列化&#xff1a;数据打包的奇妙之旅 ✈️欢迎来到计算机“十万个为什么”系列&#xff01; 本文将以「序列化与反序列化」为主题&#xff0c;深入探讨计算机世界中数据的打包与解包过程。 让我们一起解开数据的神秘面…

机器学习与深度学习评价指标

机器学习与深度学习评价指标完全指南 📊 为什么需要评价指标? 想象你是一位医生,需要判断一个诊断模型的好坏。如果模型说"这个病人有癌症",你需要知道: 这个判断有多准确? 会不会漏掉真正的癌症患者? 会不会误诊健康的人? 评价指标就像是给AI模型打分的&…

Hugging Face-环境配置

打开anaconda promptconda activate pytorchpip install -i https://pypi.tuna.tsinghua.edu.cn/simple transformers datasets tokenizerspycharm找到pytorch下的python.exe#将模型下载到本地调用 from transformers import AutoModelForCausalLM,AutoTokenizer#将模型和分词工…

cnn中池化层作用

一、池化层概述 在卷积神经网络中&#xff0c;池化层是核心组件之一&#xff0c;主要作用是逐步降低特征图的空间尺寸即宽和高&#xff0c;从而减少计算量、控制过拟合并增强模型的鲁棒性。 核心作用 降维与减少计算量 压缩特征图的尺寸&#xff0c;显著减少后续层的参数数量和…

写一个音乐爬虫

今天我们写一个网易云音乐的爬虫&#xff0c;爬取网易云音乐热歌榜音乐链接并下载&#xff0c;这里用到了之前引用的BeautifulSoup和requests。 BeautifulSoup是一个Python库&#xff0c;用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历文档树和搜索文档树中的元…

战斗公式和伤害走配置文件

故事背景&#xff0c;上次属性计算用的配置&#xff0c;这次伤害计算也走配置&#xff0c;下面是测试代码和测试数据local formulas {[100001]{id 100001,name "基础伤害",formula "function (self,tag,ishit,iscritial,counterratio)\n if ishit1 then\n …

线性代数 上

文章目录线性代数知识整理一、求行列式1、 套公式2、利用性质&#xff0c;化为可套公式3、抽象行列式4、抽象向量二、代数余子式的线性组合三、求AnA^nAn四、证明A可逆五、求A的逆1、定义法2、初等变换3、公式六、求秩七、线性表示的判定八、线性无关九、求极大线性无关组十、等…

红帽AI推理服务器三大特点

生成式人工智能&#xff08;Gen AI&#xff09;的迅猛发展&#xff0c;对大型语言模型&#xff08;LLM&#xff09;的部署提出了更高的性能、灵活性和效率要求。无论部署在何种环境中&#xff0c;红帽AI推理服务器都为用户提供经过强化并获得官方支持的vLLM发行版&#xff0c;配…

开始记录一步步学习pcl

安装参考&#xff0c;大神写的非常详细&#xff0c;一步到位 https://blog.csdn.net/qq_36812406/article/details/144307648?ops_request_misc%257B%2522request%255Fid%2522%253A%25220e215e6ac266b90ded12ed6b2eab1257%2522%252C%2522scm%2522%253A%252220140713.13010233…

Linux系统Centos7 安装mysql5.7教程 和mysql的简单指令

目录 一. 安装 MySQL 官方 Yum 仓库 二. 安装 MySQL 5.7 1.查看可用的mysql版本仓库 2.启用MySql5.7仓库 3.禁用更高版本的仓库&#xff08;可选&#xff09; 4.导入 MySQL GPG 公钥 5.安装MySql5.7 三. 启动 MySQL 服务 1.启动 MySQL 服务 2. 设置开机自启 3.查看服…

嵌入式——C语言:指针③

一、函数指针和指针函数&#xff08;一&#xff09;指针函数&#xff1a;是函数&#xff0c;函数的返回值是指针1.不能返回局部变量的值2.指针函数返回的地址可以作为下一个函数调用的参数&#xff08;二&#xff09;函数指针&#xff1a;是指针&#xff0c;指针指向一个函数in…

OpenCV(05)直方图均衡化,模板匹配,霍夫变换,图像亮度变换,形态学变换

【OpenCV&#xff08;01&#xff09;】基本图像操作、绘制&#xff0c;读取视频 【OpenCV&#xff08;02&#xff09;】图像颜色处理&#xff0c;灰度化&#xff0c;二值化&#xff0c;仿射变换 【OpenCV&#xff08;03&#xff09;】插值方法&#xff0c;边缘填充&#xff0…

常见的未授权访问漏洞靶场-练习教程

一.Redis未授权访问漏洞1.首先需要准备一个vps和vulhub靶场&#xff0c;然后进入目录。命令:进入靶场目录&#xff1a;cd /etc/vulhub-master/redis/4-unacc 启动靶场&#xff1a;docker-compose up -d2.然后启动我们kali,下载redis服务然后连接redis&#xff0c;并执行命令。…

EAP(基于事件的异步编程模式)

&#x1f4dc; 1. 核心思想 &#x1f4cc; 事件驱动解耦 异步操作通过事件通知结果&#xff0c;调用者无需阻塞线程&#xff0c;通过事件处理器响应操作完成、错误或取消。 &#x1f4cc; 线程池与UI线程协同 耗时操作在后台线程池执行&#xff0c;完成后通过 SynchronizationC…

【三桥君】如何解决后端Agent和前端UI之间的交互问题?——解析AG-UI协议的神奇作用

​你好&#xff0c;我是 ✨三桥君✨ &#x1f4cc;本文介绍&#x1f4cc; >> 一、引言 在智能体&#xff08;Agent&#xff09;领域&#xff0c;MCP、A2A、ANP等协议已经规范了Agent与工具、Agent与Agent之间的通信&#xff0c;但Agent与用户之间的交互一直缺乏标准化。…