План курса / Все задачи / Алгоритмы и структуры данных
Сортировка элементов в квадрате
легко
# решено
Дан массив nums, отсортированный в неубывающем порядке. Нужно вернуть отсортированный массив, состоящий из всех элементов массива nums, возведенных в квадрат.
Неубывающий порядок – порядок, где каждый следующий элемент больше или равен предыдущему.
public class Solution
{
public static List<int> SortedSquares(List<int> nums)
{
int n = nums.Count;
int[] result = new int[n];
int p1 = 0;
int p2 = n - 1;
int idx = n - 1;
while (p1 <= p2)
{
// Больший по модулю элемент записываем в конец
if (Math.Abs(nums[p1]) > Math.Abs(nums[p2]))
{
result[idx] = nums[p1] * nums[p1];
p1++;
}
else
{
result[idx] = nums[p2] * nums[p2];
p2--;
}
idx--;
}
return new List<int>(result);
}
}
#include <vector>
using namespace std;
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
vector<int> result(n);
int p1 = 0;
int p2 = n - 1;
int idx = n - 1;
while (p1 <= p2) {
// больший по модулю элемент записываем в конец
if (abs(nums[p1]) > abs(nums[p2])) {
result[idx] = nums[p1] * nums[p1];
p1++;
} else {
result[idx] = nums[p2] * nums[p2];
p2--;
}
idx--;
}
return result;
}
package main
func sortedSquares(nums []int) []int {
n := len(nums)
result := make([]int, n)
p1 := 0
p2 := n - 1
idx := n - 1
for p1 <= p2 {
// больший по модулю элемент записываем в конец
if abs(nums[p1]) > abs(nums[p2]) {
result[idx] = nums[p1] * nums[p1]
p1++
} else {
result[idx] = nums[p2] * nums[p2]
p2--
}
idx--
}
return result
}
func abs(a int) int {
if a < 0 {
return -a
}
return a
}
import java.util.*;
public class Solution {
public List<Integer> sortedSquares(List<Integer> nums) {
int n = nums.size();
Integer[] result = new Integer[n];
int p1 = 0;
int p2 = n - 1;
int idx = n - 1;
while (p1 <= p2) {
// больший по модулю элемент записываем в конец
if (Math.abs(nums.get(p1)) > Math.abs(nums.get(p2))) {
result[idx] = nums.get(p1) * nums.get(p1);
p1++;
} else {
result[idx] = nums.get(p2) * nums.get(p2);
p2--;
}
idx--;
}
return Arrays.asList(result);
}
}
from typing import *
def sorted_squares(nums: List[int]) -> List[int]:
result = [0] * len(nums)
p1 = 0
p2 = len(nums) - 1
idx = len(nums) - 1
while p1 <= p2:
# больший по модулю элемент записываем в конец
if abs(nums[p1]) > abs(nums[p2]):
result[idx] = nums[p1] ** 2
p1 += 1
else:
result[idx] = nums[p2] ** 2
p2 -= 1
idx -= 1
return result
/**
* @param {number[]} nums
* @returns {number[]}
*/
export function sortedSquares(nums) {
const n = nums.length;
const result = new Array(n);
let p1 = 0;
let p2 = n - 1;
let idx = n - 1;
while (p1 <= p2) {
// больший по модулю элемент записываем в конец
if (Math.abs(nums[p1]) > Math.abs(nums[p2])) {
result[idx] = nums[p1] ** 2;
p1 += 1;
} else {
result[idx] = nums[p2] ** 2;
p2 -= 1;
}
idx -= 1;
}
return result;
}