求有序数组的平方(C语言解法)
给一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序 排序。
示例 :
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]
实例一:
#include <stdio.h>
int const numsize = 5;
int main()
{
int nums[] = {-4,-1,0,3,10};
for (int sum = 0; sum < numsize; sum++) {
nums[sum] = nums[sum] * nums[sum];
}
int end = 0;
for (int a = 0; a < numsize; a++) {
if (nums[a] > nums[a+1]) {
end = nums[a]; nums[a] = nums[a+1]; nums[a+1] = end;
if (nums[a-1] > nums[a]) {
end = nums[a-1]; nums[a-1] = nums[a]; nums[a] = end;
}
}
}
for (int zero = 0; zero < numsize; zero++){
printf("%d\t", nums[zero]);
}
}
实例二:
#include <stdio.h>
#include <stdlib.h>
int const numsize = 5;
int main() {
int nums[] = {-4,-1,0,3,10};
//创建两个指针,一个指向数组最后一位元素、一个指向第一位元素
int left = 0;
int right = numsize - 1;
//最后要返回的结果数组
int* anx = (int*)malloc(sizeof(int) * 4);
int index;
for (index = numsize - 1; index >= 0; index--) {
int Ileft = nums[left] * nums[left];
int Iright = nums[right] * nums[right];
if (Ileft > Iright) {
anx[index] = Ileft;
left++;
}
else {
anx[index] = Iright;
right--;
}
}
for (int zero = 0; zero < numsize; zero++){
printf("%d\t", anx[zero]);
}
}