SortedSquares
Published at 2021-11-09
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
left, right = 0, len(nums) - 1
answer = []
while left <= right:
if abs(nums[left]) >= abs(nums[right]):
answer.append(pow(nums[left], 2))
left += 1
else:
answer.append(pow(nums[right], 2))
right -= 1
return sorted(answer)
# 절대값이 크면 제곱수가 크니까 절대값으로 비교하면 됨
# 맨 앞, 맨 뒤 중 절대값이 젤 큰 수가 있을거임 /**
* @param {number[]} nums
* @return {number[]}
*/
var sortedSquares = function(nums) {
let left = 0;
let right = nums.length-1;
const answer = []
while(left <= right){
if(Math.abs(nums[left]) > Math.abs(nums[right])){
answer.push(Math.pow(nums[left], 2));
left ++
}else{
answer.push(Math.pow(nums[right], 2));
right --
}
}
return answer.reverse()
};
/*
[two pointer]
asc 정렬되어 있기 때문에 맨 앞 혹은 맨 뒤의 숫자의 제곱이 배열중 가장 큰 숫자일거임
1. 맨앞, 맨뒤를 포인터로 잡고 큰수부터 answer에 담는다.
2. 마지막에 reverse()로 뒤집기
또 다른 방법:
맨 처음에 Array(nums.length)로 배열을 미리 만들고
i로 포인터를 하나 더 만들어서 뒤부터 차례대로 담아서 마지막에 뒤집기 생략하기
*/