8

LeetCode День 1 Задача Reverse Integer [Medium]

Серия LeetCode

Всем привет. Сегодня решил взять задачку посложнее начального уровня и вот что из этого вышло. Ссылка на задачу:

https://leetcode.com/problems/reverse-integer/description/

Как я понял задачу: на вход подается целое число в пределах от -2 ** 31 <= x <= (2 ** 31) - 1. Нужно вернуть целое число с цифрами в обратном порядке и тем же знаком(+/-). Если результат вышел за пределы -2 ** 31 <= x <= (2 ** 31) - 1 вернуть 0.

Что пришло в голову сразу же, как можно решить в лоб:

Сначала отбросим знак в какую-нибудь переменную и будем работать с неотрицательным числом. Для этого определим статический метод класса, который будет определять, отрицательное ли наше число. В общем то, можно прямо в функции было сравнивать заданное число с нулем, но принцип единственной ответственности (SRP) запрещает:

Самая проблема, что мы не знаем порядка числа(сколько цифр в числе), поэтому принял решение брать последнюю цифру в числе через остаток от деления на 10 и отбрасывать ее через целочисленное деление на 10:

Ну и завернуть все это в цикл while, с условием пока x - положительный :

В принципе на этом можно было бы и закончить, все таки 15% лучших по скорости, но уж как то все это кривовато. Пока думал, как же определить количество разрядов в числе, где-то на границе создания вертелось, что можно проще и вот эта строка не давала покоя: count = len(str(x))

Тут мы определяем количество разрядов просто по количеству символов, а что если для решения задачи работать не с числом, а с символами, которые их означают?

И таки да, сначала число приводим к строке, затем через срез разворачиваем строку и приводим обратно к числу.

Схлопнем эти три строки в одну, поправим логику в методе проверки результата и отправим итоговое решение:

В принципе результат даже улучшился, по скорости обработки такое решение вошло в 6% лучших предложенных.

Посмотрим, что же предлагает нам chatGPT:

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

Программирование на python

939 постов11.9K подписчиков

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

4
Автор поста оценил этот комментарий

Beats 15%, beats 6% и так далее означает не то, что ты вошёл в 15% лучших, а наоборот, что ты опередил 15%, соответственно остальные 85 опередили тебя.

Перед тем, как приступать к решению алг. задач, рекомендую узнать, что такое сложность алгосов, и какие действия с какими структурами языка имеют какую сложность, в идеале ещё понять, почему.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Спасибо
0
Автор поста оценил этот комментарий

А вот и подтверждение, что график быстродействия не слишком показателен, вот свежий прогон того же кода

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Т. е. скорость выполнения зависит не только от самого кода? А у Вас премиум есть?
показать ответы
0
Автор поста оценил этот комментарий

посчитайте сколько лет правительство США кормило Intel

Нисколько. Нашёл их отчёты с 1968 (года основания) — все прибыльные.

Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Они прибыльные за счёт гос контрактов.
показать ответы
0
Автор поста оценил этот комментарий

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

Посмешили. А бот сможет скомпоновать код из нескольких модулей? Он вообще что-нибудь кроме кода на одну страничку (из одной функции) умеет? Нет. А он уже убыточен, не оправдывает мощности, в него вложенные.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Много чего было убыточным на старте, посчитайте сколько лет правительство США кормило Intel, до того как интелы стали крутой компанией с прибылями. А теперь куда не ткнись попадёшь в интел.
показать ответы
3
Автор поста оценил этот комментарий

Кто-нибудь скажет ему, или не будем расстраивать?


"все таки 15% лучших по скорости"

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
А что не так? Я не правильно что - то понял? Или вопрос к 15-16 %?
показать ответы
4
DELETED
Автор поста оценил этот комментарий
Это ведь шутка...
Правда, правда ведь?..
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Иллюстрация к комментарию

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества