C++ 中的下一个更小的元素

在本教程中,我们将编写一个程序,为数组中的所有元素查找下一个较小的元素。

下一个较小的元素是它之后的第一个较小的元素。让我们看一个例子。

arr = [1, 2, 3, 5, 4]

5 的下一个较小的元素是 4,元素 1、2、3 的下一个较小的元素是 -1,因为在它们之后没有较小的元素。

我们可以在O(n)时间复杂度上使用堆栈来解决问题。

让我们看看解决问题的步骤。

  • 用随机数初始化数组

  • 初始化一个堆栈。

  • 将第一个元素添加到堆栈中。

  • 遍历数组的元素。

    • 使用下一个较小的元素作为当前元素打印顶部元素。

    • 弹出顶部元素。

    • 如果堆栈为空,则将当前元素添加到堆栈中。

    • 而当前元素小于栈顶元素。

    • 将元素添加到堆栈中。

    • 虽然堆栈不为空。

      • 将下一个较小元素的元素打印为 -1。

    示例

    让我们看看代码。

    #include <bits/stdc++.h>
    using namespace std;
    void nextSmallerElements(int arr[], int n) {
       stack<int> s;
       s.push(arr[0]);
       for (int i = 1; i < n; i++) {
          if (s.empty()) {
             s.push(arr[i]);
             continue;
          }
          while (!s.empty() && s.top() > arr[i]) {
             cout << s.top() << " -> " << arr[i] << endl;
             s.pop();
          }
          s.push(arr[i]);
       }
       while (!s.empty()) {
          cout << s.top() << " -> " << -1 << endl;
          s.pop();
       }
    }
    int main() {
       int arr[] = { 5, 4, 3, 2, 1 };
       int n = 5;
       nextSmallerElements(arr, n);
       return 0;
    }
    输出结果

    如果你运行上面的代码,那么你会得到下面的结果。

    1 -> 2
    2 -> 3
    3 -> 4
    4 -> 5
    5 -> -1

    结论

    如果您对本教程有任何疑问,请在评论部分提及。