В приведенном ниже коде, я думаю, сложность составляет O(n*m)
, где n
- это размер массива a
, а m
- это элементы в Stack
в худшем случае, в каком-то посте я видел сложность как O(n+m)
, может кто-нибудь объяснить, почему сложность времени не O(n*m)
Stack<Integer> s = new Stack();
var nextGreater = new ArrayList<Pair<Integer,Integer>>();
for(int i=0; i<a.length; i++){
while(!s.empty() && a[i] > s.peek()) {
nextGreater.add(new Pair<Integer,Integer>(s.pop(), a[i]));
}
s.push(a[i]);
}
while(!s.empty()) nextGreater.add(new Pair<Integer,Integer>(s.pop(), -1));