100 дней до Amazon
100 дней до Amazon - День 23 - следующий великий элемент
Закончились бесплатные истории? Вот моя Ссылка на друга.
Введение
Привет, ребята, сегодня 23 день испытания, которое я принял. При этом я буду каждый день в течение 100 дней решать вопросы программирования, которые задавались в предыдущих интервью.
У вас будет бонус в конце, если вы продолжите читать. Вы можете узнать компании, задававшие эти вопросы, в реальных интервью.
Все эти задачи взяты из следующей электронной книги. 🎓
Это совершенно бесплатно 🆓, если у вас есть подписка на amazon kindle.
Эта электронная книга содержит 100 задач по программированию, которые были заданы в основных технических вопросах на собеседовании. В нем также есть руководство по решению всех проблем более чем 200 способами. Эти проблемы, я уверяю вас, уже задавались в предыдущих интервью.
Вы должны решить, хотите ли вы пройти неподготовленным к техническому собеседованию или продолжить и быстро найти это руководство, чтобы решить 100 проблемы.
Начни восхождение к величию🚀
Примечание. эта электронная книга содержит только ссылки на решения.
День 23 - Следующий Великий Элемент 🏁
AIM🏹
Учитывая круговой массив (следующий элемент последнего элемента является первым элементом массива), выведите Следующее большее число для каждого элемента.
Следующее большее число числа x является первым большим числом после его порядка обхода, следующим в массиве, что означает, что вы можете выполнять циклический поиск, чтобы найти его следующее большее число.
Если его не существует, выведите -1 для этого числа.
Пример
Input: [1,2,1] Output: [2,-1,2] Explanation: The first 1's next greater number is 2; The number 2 can't find next greater number; The second 1's next greater number needs to search circularly, which is also 2
Код👇
class Solution { | |
public int[] nextGreaterElements(int[] nums) { | |
int ans[] = new int [nums.length]; | |
Arrays.fill(ans, -1); | |
for(int i=0; i<nums.length; i++) | |
{ | |
for(int j=1 ; j < nums.length ; j++) | |
{ | |
if(nums[(i+j) % nums.length] >nums[i]) | |
{ | |
ans[i] = nums[(i+j) % nums.length]; | |
System.out.print(ans[i]); | |
break; | |
} | |
} | |
} | |
return ans; | |
} | |
} |
Алгоритм👨🎓
- Мы знаем, что если следующего большего элемента не существует, мы должны вернуть -1. Вместо проверки этого условия на каждой итерации. Мы могли бы просто инициализировать массив с -1.
- Если есть какие-либо большие элементы, он заменит это -1.
- Поскольку это круговой массив. Вам необходимо перебрать каждый элемент массива кроме текущего элемента.
- Вместо того, чтобы писать условия для этого, мы могли бы использовать оператор %.
- (i + j)% nums.length предоставит элементы массива, который предшествует текущему элементу.
- Добавьте больший элемент в массив результатов ans.
- В конце обхода вернуть массив результатов
Вывод
Сталкивались ли вы с этим вопросом раньше в своем интервью? Поделитесь этим в разделе комментариев ниже. 🤝
Не забывайте нажимать кнопку подписки✅, чтобы получать обновления, когда мы публикуем новые задачи по кодированию. Расскажите, как вы решили эту проблему. 🔥 Мы были бы рады их прочитать. ❤ Мы можем рассказать о вашем методе в одном из сообщений блога.
Хотите стать выдающимся в программировании на Java?
Нажмите ЗДЕСЬ 🧨🎊🎃
Я опубликовал электронную книгу. Сборник 100 решенных проблем программирования на Java (интервью). (HackerRank) 🐱💻
Это совершенно бесплатно 🆓, если у вас есть подписка на amazon kindle.