https://leetcode.com/problems/squares-of-a-sorted-array/
1. Use swapsort:
//TLEclass Solution {public:vector<int> sortedSquares(vector<int>& A) {if(A.empty()) return A;for(int i = 0; i < A.size() - 1; i++){for(int j = i + 1; j < A.size(); j++){if(abs(A[i]) > abs(A[j]))swap(A[i], A[j]);}}for(int i = 0; i < A.size(); i++)A[i] = A[i] * A[i];return A;}};
2. Use STL template:
//116 ms 25.9 MBclass Solution {public:vector<int> sortedSquares(vector<int>& A) {if(A.empty()) return A;for(int i = 0; i < A.size(); i++){A[i] = A[i] * A[i];}sort(A.begin(), A.end());return A;}};
3. Use two pointers:
//56 ms 26.8 MBclass Solution {public:vector<int> sortedSquares(vector<int>& A) {if(A.empty()) return A;int n = A.size();int r = 0;while(r < n && A[r] < 0)r++;int l = r - 1;vector<int> result;while(l>=0 && r<=n-1) {if(abs(A[l]) < abs(A[r])){result.push_back(A[l]*A[l]);l--;} else {result.push_back(A[r]*A[r]);r++;}}while(l>=0){result.push_back(A[l]*A[l]);l--;}while(r<=n-1){result.push_back(A[r]*A[r]);r++;}return result;}};
4. Use MergeSort:
//return vectors//512 ms 86.1 MBclass Solution {public:vector<int> sortedSquares(vector<int>& A) {if(A.empty()) return A;int n = A.size();for(int i = 0; i < n; i++)A[i] = A[i] * A[i];vector<int> result = MergeSort(A, 0, A.size()-1);return result;}private:vector<int> Merge(vector<int>& L, vector<int>& R){vector<int> sumup;int l_index = 0;int r_index = 0;while(l_index < L.size() && r_index < R.size()) {if(L[l_index] <= R[r_index]) {sumup.push_back(L[l_index]);l_index++;} else {sumup.push_back(R[r_index]);r_index++;}}while(l_index < L.size()){sumup.push_back(L[l_index]);l_index++;}while(r_index < R.size()){sumup.push_back(R[r_index]);r_index++;}return sumup;}vector<int> MergeSort(vector<int>& A, int l, int r){if(l==r) return {A[l]};int mid = l + (r - l) / 2;vector<int> L = MergeSort(A, l, mid);vector<int> R = MergeSort(A, mid + 1, r);return Merge(L, R);}};
