El día 97
Nikita Nikler
26 enero 2025, 20:59

977. Squares of a Sorted Array

Суть задачи в том ,чтобы возвести все числа входного массива в квадрат и вернуть их в отсортированном порядке. Задачу нужно решить за O(n) по времени.

Мне пришла интересная идея ,как ее решить. Классическое решение строится на базе 2 указателей ,но я решил иначе:

Возводя числа в квадрат я решил сохранять их в хешмапе ,где ключи - это сами числа ,а значения - кол-во раз ,сколько это число встречалось ,тк по условию могут быть дубликаты. Далее я делаю обход по хешмапе ,причем в JavaScript ключи итерируются по порядку возрастания их символьных кодов. Тк ключи представляют собой строки ,например ключ 10 - это совокупность 2 символов с кодами 49 и 48 соответственно для символов '1' и '0'. Таким образом перебирая ключи у объекта { 0: null, 1: null } я могу быть уверен ,что движок обойдет их по возрастанию ,и сначала будет 0 ,потом 1. Тоже верно для любых положительных чисел ,как мне кажется.

Получается 2 цикла ,где первый - O(n) ,а второй O(k) ,где k может быть меньше n при наличии дубликатов. Наличие 2 рядом стоящих циклов не влияет на класс сложности ,поэтому итоговую временную сложность можно оценить как O(n). По памяти будет тоже O(n) несмотря на то ,что я сохраняю 2 структуры. Берем снова одну с наибольшей оценкой ,а это O(n).

Посмотрев популярные решения ,не нашел такого ,что интересно. Но по сути решение это скорее специфичное может быть для языка. Я не знаю ,как на других языках происходит перебор ключей ,и работают ли там такие правила ,но например с Map такое бы уже не прокатило.

Эталонное решение подразумевает наличие 2 указателей. Я не сильно в нем разобрался ,сходу мне оно кажется даже странным и не очень понятным. Разберу его чуть позже.

Les gusta? Cuéntale a tus amigos!
Oleg27/01/2025

Если ты про эту задачу 977. Squares of a Sorted Array https://leetcode.com/problems/squares-of-a-sorted-array/description/ Там решение простое. В ней ключевое, числа целые и отсортированные. Просто часть из них может быть отрицательная. Есть 2 указателя на начало и на конец. Идём по массиву и оба индекса возводим в квадрат, больший результат пишем в результирующий массив. В этой задаче основной затык, что числа отрицательные. А решение несложное https://github.com/orion55/leetcode/blob/de8332854eed04c80e622b7b91ebd1e5d11a01f0/src/array/sortedSquares/solution.ts В твоём подходе возникла коллизия при хешировании, которую решаешь через второй цикл.

Responder
Comentar
Ir a la grabación en la cinta de opciones
El objetivo de

Puede publicar
su objetivo aquí

Podemos ayudarle a lograrlo!

310 000

ideas afines

instrumentos

para un logro emocionante

Únete a nosotros
Registración

Las posibilidades
están ilimitadas.
Es la hora
de descubrir las suyas

Уже зарегистрированы?
Entrada al sitio

Entre.
Está abierto.

¿Aún no está registrado?
 
Conéctese a cualquiera de sus cuentas, sus datos se tomarán de la cuenta.
¿Ha olvidado la contraseña?