题目链接:977.有序数组的平方
卡哥的视频链接:双指针法经典题目 | LeetCode:977.有序数组的平方
解题思路:这本就是有序数组,只不过可能有负数,一平方就变成最大的了,现在定义两个指针,
分别位数数组的最左端和最右端,主要作用是调整负数的相对位置。
具体逻辑如下:
-
首先,定义两个指针
left
和right
分别指向数组的起始位置和末尾位置,同时定义一个新数组result
用于存放平方后的结果,result数组的大小与原数组相同。 -
使用双指针的方法,从数组的两端开始遍历,比较左右指针所指元素的平方大小,并将较大的平方值放入
result
数组中。 -
遍历过程中,采用逆序的方式将平方值放入
result
数组中,因为在原数组中,绝对值较大的元素的平方值可能会比较大,所以需要逆序存放。 -
遍历完所有元素后,返回
result
数组,即为按非递减顺序排列的每个元素的平方值数组。
代码示例:
最后输出结果为:
总结:本题用双指针的思想解决了数组内元素平方的排序问题,在while循环条件时,注意别漏掉等于条件,否则会漏元素。
注意最开始时的取值。
注意最终输入到新数组中的元素是平方,别忘咯!