« Stock span
Stock Span
Afzal has been working with an organization called 'Money Traders' for the past few years. The organization is into the money trading business. His manager assigned him a task. For a given array/list of stock's prices for N days, find the stock's span for each day.
The span of the stock's price today is defined as the maximum number of consecutive days(starting from today and going backwards) for which the price of the stock was less than today's price.
For example, if the price of a stock over a period of 7 days are [100, 80, 60, 70, 60, 75, 85], then the stock spans will be [1, 1, 1, 2, 1, 4, 6].
Explanation:
On the sixth day when the price of the stock was 75, the span came out to be 4, because the last 4 prices(including the current price of 75) were less than the current or the sixth day's price.
Similarly, we can deduce the remaining results.
Afzal has to return an array/list of spans corresponding to each day's stock's price. Help him to achieve the task.
Input Format:
The first line of input contains an integer N, denoting the total number of days.
The second line of input contains the stock prices of each day. A single space will separate them.
Output Format:
The only line of output will print the span for each day's stock price. A single space will separate them.
You are not required to print the expected output explicitly. It has already been taken care of.
Constraints:
0 <= N <= 10^7 1 <= X <= 10^9
Where X denotes the stock's price for a day.
Time Limit: 1 second
Sample Input 1:
4
10 10 10 10
Sample Output 1:
1 1 1 1
Sample Input 2:
8
60 70 80 100 90 75 80 120
Sample Output 2:
1 2 3 4 1 1 2 8
1#include <iostream>2#include<stack>3using namespace std;45int* stockSpan(int *price, int size) {6 // Write your code here7 stack<int> st;8 int *spans = new int[size];9 spans[0]=1;10 st.push(0);1112 for(int i=1; i<size; i++){13 while(!st.empty() && price[st.top()] < price[i]){14 st.pop();15 }16 if(st.empty()){17 spans[i] = i + 1;18 }else{19 spans[i] = i-st.top();20 }21 st.push(i);22 }2324 return spans;25}2627int main() {28 int size;29 cin >> size;3031 int *input = new int[size];32 for (int i = 0; i < size; i++) {33 cin >> input[i];34 }3536 int *output = stockSpan(input, size);37 for (int i = 0; i < size; i++) {38 cout << output[i] << " ";39 }4041 cout << "\n";4243 delete[] input;44 delete[] output;45}