Computer >> Máy Tính >  >> Lập trình >> C ++

Khoảng thời gian chứng khoán trực tuyến trong C ++

Giả sử chúng ta có một API thu thập báo giá hàng ngày cho một số cổ phiếu và trả về khoảng giá của cổ phiếu đó cho ngày hiện tại. Ở đây khoảng giá của cổ phiếu ngày hôm nay được định nghĩa là -

  • Số ngày liên tiếp tối đa (bắt đầu từ hôm nay và trở đi) mà giá cổ phiếu thấp hơn hoặc bằng giá hôm nay.

Ví dụ:nếu chúng ta thấy các bản ghi cổ phiếu trong 7 ngày như [100, 80, 60, 70, 60, 75, 85], thì khoảng thời gian của cổ phiếu sẽ là [1, 1, 1, 2, 1, 4, 6]. Chúng tôi phải viết mô-đun thực tế cho API đó, mô-đun này sẽ được sử dụng khi mô-đun này sẽ được gọi

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • xác định hai mảng st, v và bộ đếm, đặt bộ đếm là 0
  • tăng bộ đếm lên 1
  • while st không trống và giá> =v [phần tử trên cùng của ngăn xếp]
    • bật ra từ ngăn xếp.
  • ans:=counter khi ngăn xếp trống, ngược lại ans:=counter - đỉnh ngăn xếp
  • chèn giá vào v
  • chèn bộ đếm vào st
  • trả lại ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#include <bits/stdc++.h>
using namespace std;
class StockSpanner {
   public:
   vector <int> st;
   int counter;
   vector <int> v;
   StockSpanner() {
      counter = 0;
   }
   int next(int price) {
      counter++;
      while(!st.empty() && price >= v[st.back() - 1])st.pop_back();
      int ans = st.empty() ? counter : counter - st.back();
      v.push_back(price);
      st.push_back(counter);
      return ans ;
   }
};
main(){
   StockSpanner ob;
   cout <<(ob.next(100)) << endl;
   cout <<(ob.next(80)) << endl;
   cout <<(ob.next(60)) << endl;
   cout <<(ob.next(70)) << endl;
   cout <<(ob.next(60)) << endl;
   cout <<(ob.next(75)) << endl;
   cout <<(ob.next(85)) << endl;
}

Đầu vào

Initialize the class, then call next() method using different values. See the main() method

Đầu ra

1
1
1
2
1
4
6