Следующая проблема большего элемента имеет временную сложность O (n * m) для стекового подхода? - PullRequest
0 голосов
/ 22 апреля 2020

В приведенном ниже коде, я думаю, сложность составляет 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));
...