【算法02天:Day2】第一章数组 LeetCode 有序数组的平方(977)

50 阅读1分钟

题目一:

image.png

解法一:(暴力解法)

这个题目第一感觉是先平方,再排序,利用 js 中 map() 和 sort() 即可。或者更暴力地就是循环平方,然后利用各种排序算法进行排序。

image.png

解法二:(双向指针)

image.png

思路:由于原来的数组就是升序,如果全是整数,那只需要平方即可,如果左边有负数,那么最大的数要么在最左边要么在最右边。刚开始写的时候,没有开辟新的空间,一直使用的是nums[right] = 大数,有问题,用笔划拉几下,发现右指针使用有问题,然后才想起应该使用新的数组,哪个大就往新数组右边位置填充,一直有个小bug,就是右边的数大于左边的数时,赋值完毕后忘记right--,大意了。

解法三:(贪心算法)借鉴他人

思路:

把所有负数扔在一个中间数组中,到正数的时候从中间数组拿出来所有的比正数小的先扔到结果数组中,然后再把当前值放在结果数组中。这个思路可以多想想。

image.png

总结:通过这个题目,我更加熟练了双指针的用法,数组里面很多题都跟双指针有关,可以首先多想想这个方法。