LeetCode 977 有序數組的平方

題目描述:

給定一個按非遞減順序排序的整數數組 A,返回每個數字的平方組成的新數組,要求也按非遞減順序排序。

 

示例 1:

輸入:[-4,-1,0,3,10]
輸出:[0,1,9,16,100]

示例 2:

輸入:[-7,-3,2,3,11]
輸出:[4,9,9,49,121]

 

提示:

  1. 1 <= A.length <= 10000
  2. -10000 <= A[i] <= 10000
  3. 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;
}

技術要點:動態分配存儲空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章