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.
  2. Если есть какие-либо большие элементы, он заменит это -1.
  3. Поскольку это круговой массив. Вам необходимо перебрать каждый элемент массива кроме текущего элемента.
  4. Вместо того, чтобы писать условия для этого, мы могли бы использовать оператор %.
  5. (i + j)% nums.length предоставит элементы массива, который предшествует текущему элементу.
  6. Добавьте больший элемент в массив результатов ans.
  7. В конце обхода вернуть массив результатов


Вывод

Сталкивались ли вы с этим вопросом раньше в своем интервью? Поделитесь этим в разделе комментариев ниже. 🤝



Не забывайте нажимать кнопку подписки✅, чтобы получать обновления, когда мы публикуем новые задачи по кодированию. Расскажите, как вы решили эту проблему. 🔥 Мы были бы рады их прочитать. ❤ Мы можем рассказать о вашем методе в одном из сообщений блога.

Хотите стать выдающимся в программировании на Java?

Нажмите ЗДЕСЬ 🧨🎊🎃

Я опубликовал электронную книгу. Сборник 100 решенных проблем программирования на Java (интервью). (HackerRank) 🐱‍💻

Это совершенно бесплатно 🆓, если у вас есть подписка на amazon kindle.

Компании

  1. Bloomberg 2) Amazon 3) Linkedin 4) Zoho 5) Google

Предыдущие сообщения в блоге