Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Số mảng con hợp lệ trong C++


Giả sử chúng ta có mảng A các số nguyên, chúng ta phải tìm số mảng con liên tục không rỗng thỏa mãn điều kiện: Phần tử trái nhất của mảng con không lớn hơn các phần tử khác trong mảng con.

Vì vậy, nếu đầu vào là [1,4,2,5,3], đầu ra sẽ là 11, vì có 11 mảng con hợp lệ, chúng là như [1],[4],[2],[5],[3],[1,4],[2,5],[1,4,2],[2,5,3],[1,4,2,5],[1,4,2,5,3].

Để giải quyết, chúng ta sẽ làm theo các bước:

  • ret := 0

  • n := kích thước nums

  • Định nghĩa một ngăn xếp st

  • Khởi tạo i := 0, khi i < kích thước nums, cập nhật (tăng i lên 1), làm:

    • x := nums[i]

    • Khi (st không rỗng và x < phần tử đỉnh st), làm:

      • Xóa phần tử từ st

    • Chèn x vào st

    • ret := kích thước st + ret

  • Trả về ret

Hãy xem triển khai sau để hiểu rõ hơn:

Ví dụ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int validSubarrays(vector<int>& nums) {       int ret = 0;       int n = nums.size();       stack <int> st;       for(int i = 0; i < nums.size(); i++){          int x = nums[i];          while(!st.empty() && x < st.top()) st.pop();          st.push(x);          ret += st.size();       }       return ret;    } }; main(){    Solution ob;    vector<int> v = {1,4,2,5,3};    cout << (ob.validSubarrays(v)); }

Đầu vào

{1,4,2,5,3}

Đầu ra

11