題目描述:
給定一個按非遞減順序排序的整數數組 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;
}
技術要點:動態分配存儲空間。