已经思考出双指针的核心了,就差临门一脚,因为最初使用的是双指针比较将较小的数填入结果数组,然后发现第一次比较两个数得到的结果不是整个数组中最小的数,就陷入停滞了,没有考虑到这样比较得到的最大的数是准确的,只需要逆向填入结果数组即可
代码如下
public int[] sortedSquares(int[] nums) {
int left= 0;
int right = nums.length - 1;
int[] result = new int[nums.length];
int i = nums.length - 1;
boolean isleft = true;
int a1 = 0;
int a2 = nums[nums.length - 1] * nums[nums.length - 1];
while(left <= right){
if(isleft) {
a1 = nums[left] * nums[left];
}else {
a2 = nums[right] * nums[right];
}
if(a1 < a2){
result[i] = a2;
i--;
right--;
isleft = false;
}
else {
result[i] = a1;
i--;
left++;
isleft = true;
}
}
return result;
}
Comments NOTHING