Create a customized data structure which evaluates functions in O(1)
Create a customized data structure such that it has functions :-
GetLastElement();
RemoveLastElement();
AddElement()
GetMin()
GetLastElement();
RemoveLastElement();
AddElement()
GetMin()
All the functions should be of O(1)
Question Source : amazon interview questions
Approach :
1) create a custom stack of type structure with two elements, (element, min_till_now)
2) implement the functions on this custom data type
1) create a custom stack of type structure with two elements, (element, min_till_now)
2) implement the functions on this custom data type
// program to demonstrate customized data structure// which supports functions in O(1)#include <iostream>#include <vector>using namespace std;const int MAXX = 1000;// class stackclass stack { int minn; int size;public: stack() { minn = 99999; size = -1; } vector<pair<int, int> > arr; int GetLastElement(); int RemoveLastElement(); int AddElement(int element); int GetMin();};// utility function for adding a new elementint stack::AddElement(int element){ if (size > MAXX) { cout << "stack overflow, max size reached!\n"; return 0; } if (element < minn) minn = element; arr.push_back(make_pair(element, minn)); size++; return 1;}// utility function for returning last element of stackint stack::GetLastElement(){ if (size == -1) { cout << "No elements in stack\n"; return 0; } return arr[size].first;}// utility function for removing last element successfully;int stack::RemoveLastElement(){ if (size == -1) { cout << "stack empty!!!\n"; return 0; } // updating minimum element if (size > 0 && arr[size - 1].second > arr[size].second) { minn = arr[size - 1].second; } arr.pop_back(); size -= 1; return 1;}// utility function for returning min element till now;int stack::GetMin(){ if (size == -1) { cout << "stack empty!!\n"; return 0; } return arr[size].second;}// Driver codeint main(){ stack s; int success = s.AddElement(5); if (success == 1) cout << "5 inserted successfully\n"; success = s.AddElement(7); if (success == 1) cout << "7 inserted successfully\n"; success = s.AddElement(3); if (success == 1) cout << "3 inserted successfully\n"; int min1 = s.GetMin(); cout << "min element :: " << min1 << endl; success = s.RemoveLastElement(); if (success == 1) cout << "removed successfully\n"; success = s.AddElement(2); if (success == 1) cout << "2 inserted successfully\n"; success = s.AddElement(9); if (success == 1) cout << "9 inserted successfully\n"; int last = s.GetLastElement(); cout << "Last element :: " << last << endl; success = s.AddElement(0); if (success == 1) cout << "0 inserted successfully\n"; min1 = s.GetMin(); cout << "min element :: " << min1 << endl; success = s.RemoveLastElement(); if (success == 1) cout << "removed successfully\n"; success = s.AddElement(11); if (success == 1) cout << "11 inserted successfully\n"; min1 = s.GetMin(); cout << "min element :: " << min1 << endl; return 0;} |
Output:
5 inserted successfully
7 inserted successfully
3 inserted successfully
min element :: 3
removed successfully
2 inserted successfully
9 inserted successfully
Last element :: 9
0 inserted successfully
min element :: 0
removed successfully
11 inserted successfully
min element :: 2
Time complexity : Each function runs in O(1)
No comments:
Post a Comment