問題
難易度:簡単
説明:
水問題、小さいものから大きいものへと並べ替えられた配列要素を二乗し、次に小さいものから大きいものへと配列を返します。負の数があるため、二乗後に簡単に並べ替えることができます。
質問リンク:https://leetcode.com/problems/squares-of-a-sorted-array/
入力範囲:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
降順ではない 順にソートされ ます。
ケースを入力してください:
Example 1:
Input: nums = [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Explanation: After squaring, the array becomes [16,1,0,9,100].
After sorting, it becomes [0,1,9,16,100].
Example 2:
Input: nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]
私のコード:
APIの使用は非常に簡単で、独自に作成することもできます
java:
class Solution {
public int[] sortedSquares(int[] A) {
for(int i = 0;i < A.length;i ++) A[i] = (int)Math.pow(A[i], 2);
Arrays.sort(A);
return A;
}
}
class Solution {
public int[] sortedSquares(int[] A) {
int len = A.length, left = 1, right, index = 0;
int[] B = new int[len];
for(int i = 0;i < len;i ++) A[i] = (int)Math.pow(A[i], 2);
for(;left < len; left ++)
if(A[left - 1] < A[left]) break;
left --;
right = left + 1;
while(right < len && left >= 0) {
if(A[left] < A[right]) B[index ++] = A[left --];
else if(A[left] > A[right]) B[index ++] = A[right ++];
else B[index ++] = B[index ++] = A[left --] = A[right ++];
}
while(left >= 0) B[index ++] = A[left --];
while(right < len) B[index ++] = A[right ++];
return B;
}
}
c ++:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int len = nums.size(), left = 1, index = 0;
vector<int> res(len);
for (int i = 0; i < nums.size(); i++) nums[i] = pow(nums[i], 2);
for (; left < nums.size(); left++)
if (nums[left - 1] < nums[left]) break;
left = left - 1;
int right = left + 1;
while (right < len && left >= 0) {
if (nums[right] > nums[left]) res[index ++] = nums[left--];
else if (nums[right] < nums[left]) res[index ++] = nums[right++];
else res[index ++] = res[index ++] = nums[left--] = nums[right++];
}
while (left >= 0) res[index ++] = nums[left--];
while(right < len) res[index ++] = nums[right++];
return res;
}
};