题目
代码
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sortedSquares(int* nums, int numsSize, int* returnSize) {
int *nums1=malloc(numsSize*sizeof(int));
*returnSize=numsSize;
int k=numsSize-1,i,j;
for(i=0,j=numsSize-1;i<=j;)
{
if(nums[i]*nums[i]>nums[j]*nums[j])
{
nums1[k--]=nums[i]*nums[i];
i++;
}else{
nums1[k--]=nums[j]*nums[j];
j--;
}
}
return nums1;
}
结果展示
思考
错误一:
笔者在编写代码时没有注意malloc的用法而导致了错误,malloc 函数的返回类型是通用指针类型(void *)但是在实际的使用当中,可以将返回值转换为特定的指针类型。
错误二:
在编写的时候没有注意语句的执行顺序,语句的总体执行顺序是从右到左的进行执行,因此如果按照上式进行书写,那么会导致右边数组指针先向后移动一位在进行赋值,这样就导致了错误。因此需要修改为以下状态: