977 - Squares Of A Sorted Array
#easy
Given an integer array nums sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order.
1 <= nums.length <= 104-104 <= nums[i] <= 104
1,2,3,4,5,.: 递增排列
9,8,7,6,5.: 递减排列
1,2,3,3,4,5,8,8,.: 非递减排列 non-decreasing
9,8,7,7,6,5,5,2,1,.: 非递增排列 non-ascending
使用雙指針法
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size(), 0);
int it = nums.size() - 1;
for ( int leftIndex = 0, rightIndex = nums.size() - 1; leftIndex <= rightIndex; ) {
if ( nums[leftIndex]*nums[leftIndex] > nums[rightIndex]*nums[rightIndex] ) {
result[it] = nums[leftIndex]*nums[leftIndex];
it--;
leftIndex++;
}
else {
result[it] = nums[rightIndex]*nums[rightIndex];
it--;
rightIndex--;
}
} // for
return result;
}
};

2
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int left = 0;
int right = nums.size() - 1;
int it = nums.size() - 1;
vector<int> result( nums.size(), 0 );
while ( left <= right ) {
if ( nums[left]*nums[left] >= nums[right]*nums[right]) {
result[it] = nums[left]*nums[left];
left++;
}
else {
result[it] = nums[right]*nums[right];
right--;
}
it--;
}
return result;
}
};