503より大きいIIの次の要素
503グレーター次の要素II
タイトル説明
ループ配列を指定し、次に高い素子の各素子の出力(次の要素の最後の要素は、配列の最初の要素です)。より大きな数xの次の要素は、あなたがより多くのその次のサイクルを検索する必要があることを意味し、この番号の後の最初の数、より大きな配列横断順序に基づいています。そうでない場合は、-1の出力。
LeetCode 503次大要素II 中等
例1:
入力:
[1,2,1]
出力: [2、1,2]
説明: 最初に大きな数は1~2であり、より多く番号2下で見つけることができない。第二サイクルの次の最大数は1つの検索結果が2である必要。
出力: [2、1,2]
説明: 最初に大きな数は1~2であり、より多く番号2下で見つけることができない。第二サイクルの次の最大数は1つの検索結果が2である必要。
注:入力配列の長さが10000を超えません。
Java実装の
ブルートフォース
import java.util.Arrays;
class Solution {
public int[] nextGreaterElements(int[] nums) {
int n = nums.length;
int[] res = new int[n];
Arrays.fill(res, -1);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < i + n; j++) {
if (nums[j % n] > nums[i]) {
res[i] = nums[j % n];
break;
}
}
}
return res;
}
}
スタックスタック
import java.util.Arrays;
import java.util.Stack;
class Solution {
public int[] nextGreaterElements(int[] nums) {
int n = nums.length;
Stack<Integer> stack = new Stack<>();
int[] res = new int[n];
Arrays.fill(res, -1);
for (int i = 0; i < 2 * n; i++) {
int num = nums[i % n];
while (!stack.isEmpty() && num > nums[stack.peek()]) {
res[stack.pop()] = num;
}
if (i < n) {
stack.push(i);
}
}
return res;
}
}
類似のトピック
参考資料