一、例题
二、思路
1、暴力解法:先平方,后排序;
2、双指针法:两个指针分别指向数组的首部和尾部,每次比较两 个指针所指值的大小,将大的逆序放入新数组。将双指针从外向内移动不会发生数组越界问题。
三、解析
1)暴力解法
1、代码实现
2、缺点
暴力解法没有利用题目中给到的条件:给定一个含正负数的升序数组。所以平方以后的大值肯定出现在两侧,不是左边就是右边(负数的平方为正数)。
2)双指针法
1、动画演示
2、代码实现
3、双指针的优势
原数组所有数平方后,负数可能成为最大值,平方后最大值只可能在两端出现,不可能在中间。原数组一个指针i指向前端,一个j指向末端。排序得到的数值只可能为最大值,所以一个指针p指向新数组末端,从最大值开始赋值
四、问题特点
1.非递减顺序:数列是递减的,不是单调递减,有重复值;
2.数字的平方:任何整型数平方后都是非负数,所以要考虑负数平方后的位置;
3.新数组:创建一个新数组方法;