题目描述:
给定一个按非递减顺序排序的整数数组 A
,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11] 输出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A
已按非递减顺序排序。
解题思路:首先对数组中的元素进行平方运算,然后对平方计算之后的元素进行排序。
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sortedSquares(int* A, int ASize, int* returnSize) {
int size = 0;
int i ,j, temp;
int * B = (int *)malloc(sizeof(int)*ASize);
for(int i = 0; i <ASize; i++){
B[i] = A[i] * A[i];
for(int j = 0; j < size; j++){
if(B[i] < B[j]){
temp = B[i];
B[i] = B[j];
B[j] = temp;
}
}
size++;
}
*returnSize = size;
return B;
}
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
vector<int> value;
for(int i = 0; i < A.size(); i++){
value.push_back(A[i]*A[i]);
}
sort(value.begin(), value.end());
return value;
}
};
完整代码:没有注释起来的代码在本地编译器上可以得到正确的结果,在线判别系统出错。
#include<iostream>
#include<math.h>
#include<system_error>
#include<algorithm>
#include<vector>
#define N 5
using namespace std;
int* sortedSquares(int* A, int ASize, int* returnSize) {
if (ASize < 1 || ASize > 10000) {
return 0;
}
for (int i = 0; i < ASize; i++) {
if (A[i] >= -10000 && A[i] <= 10000) {
returnSize[i] = pow(A[i], 2);
}else {
break;
}
}
sort(returnSize, returnSize+ASize);
return returnSize;
}
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
/*
int* sortedSquares(int* A, int ASize, int* returnSize) {
int size = 0;
int i, j, temp;
int * B = (int *)malloc(sizeof(int)*ASize);
for (int i = 0; i <ASize; i++) {
B[i] = A[i] * A[i];
for (int j = 0; j < size; j++) {
if (B[i] < B[j]) {
temp = B[i];
B[i] = B[j];
B[j] = temp;
}
}
size++;
}
*returnSize = size;
return B;
}
*/
/*
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
vector<int> value;
for (int i = 0; i < A.size(); i++) {
value.push_back(A[i] * A[i]);
}
sort(value.begin(), value.end());
return value;
}
};
*/
int main()
{
int arr[N];
int arr2[N];
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
sortedSquares(arr, N, arr2);
for (int i = 0; i < N; i++) {
cout << arr2[i]<<" ";
}
cout << endl;
system("pause");
return 0;
}
技术要点:动态分配存储空间。