503. Next Greater Element II
Дан циклический tableau целых чисел nums (т.е. следующий element после nums[nums.length - 1] это nums[0]), return следующее большее number для каждого elementа в nums.
Следующее большее number для числа x — это первое большее number, следующее за ним в порядке обхода tableauа, что означает, что вы можете искать циклически, чтобы find следующее большее number. Если оно не существует, return -1 для этого числа.
Exemple:
Input: nums = [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.
C# solution
correspondant/originalpublic class Solution {
public int[] NextGreaterElements(int[] nums) {
int n = nums.Length;
int[] res = new int[n];
Array.Fill(res, -1);
for (int i = 0; i < n; i++) {
for (int j = 1; j < n; j++) {
if (nums[(i + j) % n] > nums[i]) {
res[i] = nums[(i + j) % n];
break;
}
}
}
return res;
}
}
C++ solution
brouillon automatique, à relire avant soumission#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public vector<int>& NextGreaterElements(vector<int>& nums) {
int n = nums.size();
vector<int>& res = new int[n];
Array.Fill(res, -1);
for (int i = 0; i < n; i++) {
for (int j = 1; j < n; j++) {
if (nums[(i + j) % n] > nums[i]) {
res[i] = nums[(i + j) % n];
break;
}
}
}
return res;
}
}
Java solution
correspondant/originalpublic class Solution {
public int[] nextGreaterElements(int[] nums) {
int[] res = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
res[i] = -1;
for (int j = 1; j < nums.length; j++) {
if (nums[(i + j) % nums.length] > nums[i]) {
res[i] = nums[(i + j) % nums.length];
break;
}
}
}
return res;
}
}
JavaScript solution
correspondant/originalvar nextGreaterElements = function(nums) {
const n = nums.length;
const res = Array(n).fill(-1);
for (let i = 0; i < n; i++) {
for (let j = 1; j < n; j++) {
if (nums[(i + j) % n] > nums[i]) {
res[i] = nums[(i + j) % n];
break;
}
}
}
return res;
};
Python solution
correspondant/originalclass Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
n = len(nums)
res = [-1] * n
for i in range(n):
for j in range(1, n):
if nums[(i + j) % n] > nums[i]:
res[i] = nums[(i + j) % n]
break
return res
Go solution
correspondant/originalfunc nextGreaterElements(nums []int) []int {
n := len(nums)
res := make([]int, n)
for i := range res {
res[i] = -1
}
for i := 0; i < n; i++ {
for j := 1; j < n; j++ {
if nums[(i+j)%n] > nums[i] {
res[i] = nums[(i+j)%n]
break
}
}
}
return res
}
Algorithm
Инициализация
Создайте tableau res той же длины, что и nums, и заполните его значениями -1.
Поиск следующего большего elementа
Для каждого elementа nums[i], используя индекс j, ищите следующий больший element среди следующих (циклически) n-1 elementов. Если найден больший element, обновите res[i] и прервите внутренний цикл.
Возврат результата
return tableau res.
😎
Vacancies for this task
offres actives with overlapping task tags are affichés.