題目說明
範例
Input: nums = [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Input: nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]
程式碼
Python 解法(雙指針從兩端)
def sortedSquares(nums):
n = len(nums)
result = [0] * n
left, right = 0, n - 1
pos = n - 1
while left <= right:
if abs(nums[left]) > abs(nums[right]):
result[pos] = nums[left] ** 2
left += 1
else:
result[pos] = nums[right] ** 2
right -= 1
pos -= 1
return result
Java 解法(雙指針從兩端)
class Solution {
public int[] sortedSquares(int[] nums) {
int n = nums.length;
int[] result = new int[n];
int left = 0, right = n - 1, pos = n - 1;
while (left <= right) {
if (Math.abs(nums[left]) > Math.abs(nums[right])) {
result[pos] = nums[left] * nums[left];
left++;
} else {
result[pos] = nums[right] * nums[right];
right--;
}
pos--;
}
return result;
}
}
Java vs Python 差異
• Python 用 **2 做平方,Java 用 * 或 Math.pow()
• Python 語法較簡潔,Java 需明確定義陣列與索引
• 核心邏輯都是 雙指針從陣列兩端比較大小,從後往前填結果
複雜度分析
• 時間複雜度:O(n),每個元素只訪問一次
• 空間複雜度:O(n),需額外陣列存結果