当前位置:网站首页>LeetCode #977.有序数组的平方
LeetCode #977.有序数组的平方
2022-07-29 05:24:00 【张楚明ZCM】
题目截图
方法一:直接排序
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
return sorted(num * num for num in nums)
测试用全部代码
from typing import List
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
return sorted(num * num for num in nums)
class main:
a = Solution()
nums = [-5,-3,-2,-1]
b = a.sortedSquares(nums)
print(b)
if __name__ == '__main__':
main()
sorted() 函数
方法二:双指针
题目所给为非递减顺序排序,平方后可能产生顺序变化只需看原数组元素是否为零。
利用如下代码记录负数所在下标。
for i in range(0, n):
if nums[i]<0:
flag = i
else:
break
也可以利用 enumerate()函数
for i, num in enumerate(nums):
if num < 0:
flag = i
else:
break
拓展:自己实现enumerate()函数
def my_enumerate(obj):
for i in range(len(obj)):
yield i,obj[i]
分别设置左右指针left=flag,right=flag+1,左指针指向第一个负数,向左移动。右指针指向第一个非负数,向右移动。
设置循环,只要左右指针没有都到达最左和最右边,就一直循环。
优先考虑两种极端情况,即,做指针在最左边,但是右指针没有到达最右边;以及右指针在最右边,但是左指针没有到达最左边。
1.当左指针在最左时,一直添加右指针指向的元素,并不断右移右指针。
2.反过来同2理。
3.当左指针指向元素小于等于右指针指向元素:添加左边的元素,并将左指针左移。
4.反过来同3理。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
flag = 0
for i in range(0, n):
if nums[i]<0:
flag = i
else:
break
left, right = flag, flag+1
ans = []
while left >= 0 or right < n:
if left < 0:
ans.append(nums[right] * nums[right])
right += 1
elif right == n:
ans.append(nums[left] * nums[left])
left -= 1
elif (nums[left]*nums[left]) <= (nums[right] * nums[right]):
ans.append(nums[left] * nums[left])
left -= 1
else:
ans.append(nums[right] * nums[right])
right += 1
return ans
方法三:双指针
将两个指针一开始就放在左右两边,比较指针指向元素平方的大小后排入数组,让他们往中间移动。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
left, right, pos= 0, n-1, n-1
ans = [0]* n
while left <= right :
if nums[left] * nums[left] > nums[right] * nums[right]:
ans[pos] = (nums[left] * nums[left])
left += 1
else:
ans[pos] = (nums[right] * nums[right])
right -=1
pos -= 1
return ans
边栏推荐
- LeetCode #26.删除有序数组中的重复项
- 【软件工程之美 - 专栏笔记】25 | 有哪些方法可以提高开发效率?
- 【软件工程之美 - 专栏笔记】28 | 软件工程师的核心竞争力是什么?(下)
- 八大排序-----------------堆排序
- Hal library learning notes-14 ADC and DAC
- CV520国产替代Ci521 13.56MHz 非接触式读写器芯片
- 太原市公交路线爬取
- Huawei cloud 14 day Hongmeng device development -day3 kernel development
- #9196 肿瘤面积 题解
- 基于F407ZGT6的WS2812B彩灯驱动
猜你喜欢
Ml4 self study notes
基于wifi的温度采集与控制系统
【软件工程之美 - 专栏笔记】29 | 自动化测试:如何把Bug杀死在摇篮里?
2022 spring recruit - Hesai technology FPGA technology post (one or two sides, collected from: Digital IC workers and FPGA Explorers)
【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?
STM8S003国产替代 DP32G003 32 位微控制器芯片
STM32 printf问题总结 semihosting microLIB理解
STM32 检测信号频率
Zero basics FPGA (5): counter of sequential logic circuit design (with introduction to breathing lamp experiment and simple combinational logic design)
2022暑初二信息竞赛学习成果分享1
随机推荐
QT learning notes QtSql
低成本2.4GHz 无线收发芯片--Ci24R1
单链表面试题
Hal library learning notes-14 ADC and DAC
Rowkey设计
LeetCode #189.轮转数组
#9196 肿瘤面积 题解
QT learning notes - Import and export of Excel
TLE5012b+STM32F103C8T6(bluepill)读取角度数据
多线程和并发
SimpleFOC+PlatformIO踩坑之路
【软件工程之美 - 专栏笔记】13 | 白天开会,加班写代码的节奏怎么破?
进程与进程的概念
利用云打码来破解登录遇到验证码的问题
【RoboMaster】A板接收JY-ME01角度传感器数据--modebus协议&CRC软件校验
STM32 串口乱码
EPS32+Platform+Arduino 跑马灯
数论:px+py 不能表示的最大数为pq-p-q的证明
基于51单片机的DAC0832波形发生器
Huawei cloud 14 day Hongmeng device development -day3 kernel development