Skip to content
This repository was archived by the owner on Oct 29, 2023. It is now read-only.

Create Next Greater Element in Array.cpp #590

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions Implementing_queue_using_one_and_two_stacks.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
#include <bits/stdc++.h>
using namespace std;

// using 2 stacks

class Queue{
public:
stack<int> st1,st2;
void enqueue(int data);
void dequeue();


};

void Queue::enqueue(int data)
{
st1.push(data);
cout<<"Pushed: "<< st1.top()<<endl;
}

void Queue::dequeue()
{
if(st1.empty())
{
cout<<"Underflow"<<endl;
return;
}
while(!st1.empty())
{
st2.push(st1.top());
st1.pop();
}

cout<<"Popped: "<< st2.top()<<endl;
st2.pop();
while(!st2.empty())
{
st1.push(st2.top());
st2.pop();
}

}


int main()
{
Queue q;
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.enqueue(40);
q.dequeue();
q.dequeue();
q.dequeue();
q.dequeue();
q.dequeue();
}


// Using 1 stack only...

class Queue{
public:
stack<int> st;
void enqueue(int data);
int dequeue();



};


void Queue::enqueue(int data)
{
st.push(data);
cout<<data<<": pushed"<<endl;
}

int Queue::dequeue()
{
if(st.empty())
{
cout<<"UnderFlow"<<endl;
return -1;
}

int top=st.top();
st.pop();

if(!st.empty())
{
int deque_ele=dequeue();
st.push(top);
return deque_ele;
}

return top;



}

int main()
{
Queue q;
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.enqueue(40);
cout<< q.dequeue()<<" :Popped"<<endl;
cout<< q.dequeue()<<" :Popped"<<endl;
cout<< q.dequeue()<<" :Popped"<<endl;
cout<< q.dequeue()<<" :Popped"<<endl;
cout<< q.dequeue()<<" :Popped"<<endl;

}
76 changes: 76 additions & 0 deletions Next Greater Element in Array.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#include <bits/stdc++.h>
using namespace std;

// NGE without Stack O(1)-> S.C.

//Function to find the next greater element for each element of the array.
vector<long long> nextLargerElement(vector<long long> nums, int n)
{
// Your code here
vector<long long> result(n, -1);

long long max_element = nums[n - 1]; // initialize the maximum element as the last element

for (long long i = n - 2; i >= 0; i--)
{
if (nums[i] >= max_element)
{
max_element = nums[i]; // update the maximum element if the current element is greater
}
else
{
int j = i + 1;
while (j < n && nums[i] >= nums[j])
{
j++;
}
if (j < n && nums[i] < nums[j])
{
result[i] = nums[j]; // update the result vector with the next greater element
}
}
}
return result;
}



// Returns the index of Next Greater element
vector<int> n_g_e(vector<int> &nums)
{
stack<int> st;
vector<int> ans;
ans.push_back(-1);
st.push(nums.size() - 1);
int n = nums.size();

for (int i = n - 2; i >= 0; i--)
{
// iska matlab he ki muje next small chahiye tha pr muje grater milra h previous me, to hm pop() krdege...
while (!st.empty() && nums[i] >= nums[st.top()])
{
st.pop();
}

if (st.empty())
{
ans.push_back(-1);
}

else
{
ans.push_back(st.top());
}

st.push(i);
}

reverse(ans.begin(), ans.end());

for (int i = 0; i < ans.size(); i++)
{
cout << ans[i] << " ";
}

return ans;
}