ھڪڙي اسٽيڪ جي ڊيزائن ڪريو جيڪا او (1) وقت ۽ اي (1) اضافي جڳھ ۾ حاصل ٿئي ٿي حاصل ڪريو


تڪليف جي سطح آسان
بار بار پڇڻ ۾ ايڊوب Amazon حقيقت جو جائزو فلپٽٽ Goldman سيچ گرين اورنج ڪليزا Microsoft جي پيٽرم پبلس سيپينٽ SAP اسپيڊل VMware
چتي

ھڪڙي اسٽيڪ جي ڊيزائن ڪريو جيڪا او (1) وقت ۽ اي (1) اضافي جڳھ ۾ حاصل ٿئي ٿي حاصل ڪريو. اھڙيءَ طرح خاص اسٽيڪ ڊيٽا جي جوڙجڪ لازمي طور تي اسٽيڪ جي سڀني عملن جي حمايت ڪرڻ گهرجي جهڙوڪ -

  • باطل ڌڪ ()
  • انٽ پاپ ()
  • بول مڪمل آهي ()
  • ڪول خالي آهي ()

مسلسل وقت ۾. ھڪڙو اضافي آپريشن حاصل ڪريو مين () گھٽ واري قيمت کي گھٽ اسٽيٽ ۾ خاص اسٽيٽ ۾ مسلسل وقت ۽ او (1) اضافي جڳھ.

ھڪڙي اسٽيڪ جي ڊيزائن ڪريو جيڪا او (1) وقت ۽ اي (1) اضافي جڳھ ۾ حاصل ٿئي ٿي حاصل ڪريو

مثال

push(30)
push(20)
push(10)
getMin()
pop()
getMin()
Minimum element : 10
Popped element : 10
Minimum element : 20
push(500)
push(50)
push(5)
getMin()
pop()
getMin()
Minimum element : 5
Popped element : 5
Minimum element : 50

minStack لاڳو ڪرڻ لاءِ رياضي / مشاهدو ڪيل طريقو

هن طريقي سان اسان گهٽ ۾ گهٽ عنصر کي تازه ڪاري ڪري رهيا آهيون.

پُش () فنڪشن ۾ جيڪڏهن زور ڏيڻو آهي گهٽ کان گهٽ عنصر کان گهٽ آهي ته اسان اسٽڪر ۾ انٽيگر مائنس گهٽ ۾ گهٽ عنصر ٻه دفعا داخل ڪري رهيا آهيون جيڪا هميشه ڏنل انٽيگر کان نن beي هوندي.

  • ڏنل انٽيگر <گهٽ عنصر جنهن جو مطلب ڏنو ويو آهي انٽيگر - گهٽ ۾ گهٽ عنصر <0
  • // ڏنل ٻن عددن کي ڏنل گڏيل شامل ڪرڻ
  • ڏنل انٽيگر - گهٽ ۾ گهٽ عنصر + ڏنل انٽيگر <0 + ڏنل انٽيگر
  • 2 * ڏنل انٽيگر - گهٽ ۾ گهٽ عنصر <ڏنل انٽيگر
  • اسان ختم ڪري سگهو ٿا 2 * ڏنل انٽيگر - گهٽ ۾ گهٽ عنصر <نئون گهٽ ۾ گهٽ عنصر

تنهن ڪري هن عنصر کي پاپ ڪرڻ دوران اهو گهٽ ۾ گهٽ عنصر کان گهٽ هوندو تنهنڪري اسان گهٽ ۾ گهٽ عنصر کي اپڊيٽ ڪنداسين.

اهڙي طرح ، پاپ () فنڪشن ۾ ، جيڪڏهن موجوده عنصر گهٽ ۾ گهٽ عنصر کان گهٽ آهي ته اسان ان کي تازه ڪاري ڪنداسين.

الورورٿم

  1. ھڪڙي جوڙجڪ ٺاھيو نئين اسٽيڪ ۽ هڪ فنڪشن ٺاهيو ڌڪ () ان ۾ جيڪو هڪ پيمراٽر طور هڪ انڌي س acceptاڻ کي قبول ڪري ٿو.
  2. چيڪ ڪريو ته اسٽيڪ خالي آهي ، اسٽور انٽرويو هڪ متغير منٽ ۾ ، انٽيريم اسٽيڪ کي داخل ڪريو ۽ واپس ڪريو.
  3. ٻي صورت ۾ جيڪڏهن انٽيگر گهٽ کان گهٽ آهي 2 * x - منٽ اسٽيڪ ۾ وجهو ۽ ايڪس کي منٽ طور تازه ڪاري ڪريو.
  4. ايلس اسٽيڪ ۾ انگور کي گڏيو ڌڪيو.
  5. فنڪشن پاپ ٺاهيو (). چيڪ ڪريو جيڪڏهن اسٽيڪ خالي پرنٽ آهي “اسٽيڪ خالي آهي” ۽ واپس وڃو.
  6. ايلس اسٽيٽ جي مٿين عنصر کي متغير ٽي ۾ اسٽاپ ۽ پاپ / هٽايو عنصر کي اسٽيڪ مان هٽايو.
  7. جانچ ڪريو ته ڇا t پرنٽ منٽ کان گھٽ آھي ۽ تازه ڪاري 2 * منٽ کان وڌيڪ.
  8. ايلس پرنٽ ٽي.
  9. فنڪشن حاصل ڪريو مين () ۽ چڪاس ڪريو ته ڇا اسٽيڪ خالي پرنٽ آهي ”اسٽيڪ خالي آهي“.
  10. ايلس گهٽ ۾ گهٽ عنصر واپس ڪيو.

ڪوڊ

minStack لاءِ سي ++ پروگرام

#include <bits/stdc++.h> 
using namespace std; 
  
struct newStack{ 
    stack<int> s; 
    int min; 
  
    void getMin(){ 
        if(s.empty()){ 
            cout<<"Stack is empty\n"; 
        }
        else{
            cout<<"Minimum element : "<<min<<"\n"; 
        }    
    } 
  
    void pop(){ 
        if(s.empty()){ 
            cout<<"Stack is empty\n"; 
            return; 
        } 
  
        cout<<"Popped element : "; 
        int t = s.top(); 
        s.pop(); 
  
        if(t<min){ 
            cout<<min<< "\n"; 
            min = 2*min - t; 
        } 
  
        else{
            cout<<t<< "\n";
        }    
    } 
  
    void push(int x){ 
        if(s.empty()){ 
            min = x; 
            s.push(x); 
            return; 
        } 
  
        if(x < min){ 
            s.push(2*x - min); 
            min = x; 
        } 
  
        else{
           s.push(x);
        }   
    } 
}; 
 
int main(){
    newStack s; 
    
    s.push(30);
    s.push(20);
    s.push(10);
    s.getMin();
    s.pop();
    s.getMin();
  
    return 0; 
}
Minimum element : 10
Popped element : 10
Minimum element : 20

جاوا پروگرام minStack لاءِ

import java.util.*; 
  
class newStack{ 
    Stack<Integer> s; 
    Integer min; 
  
    newStack(){ 
        s = new Stack<Integer>(); 
    } 
  
    void getMin(){ 
        if(s.isEmpty()) 
            System.out.println("Stack is empty"); 
  
        else{
            System.out.println("Minimum element : " + min);
        }    
    } 
  
    void pop(){ 
        if (s.isEmpty()){ 
            System.out.println("Stack is empty"); 
            return; 
        } 
  
        System.out.print("Popped element : "); 
        Integer t = s.pop(); 
  
        if(t<min){ 
            System.out.println(min); 
            min = 2*min - t; 
        } 
  
        else{
            System.out.println(t);
        }    
    } 
  
    void push(Integer x){ 
        if(s.isEmpty()){ 
            min = x; 
            s.push(x); 
            return; 
        } 
  
        if(x<min){ 
            s.push(2*x - min); 
            min = x; 
        } 
  
        else{
            s.push(x); 
        }    
    } 
}; 
  
public class Main{ 
    public static void main(String[] args){ 
        newStack s = new newStack(); 
        
        s.push(30);
        s.push(20);
        s.push(10);
        s.getMin();
        s.pop();
        s.getMin();
        
    } 
}
Minimum element : 10
Popped element : 10
Minimum element : 20

پيچيدگي تجزيي

وقت جي پيچيدگي

اي (1) هر آپريشن لاءِ ، جئين سڀ آپريشن مسلسل وقت ۾ ٿي رهيا آهن.

خلائي پيچيدگي

اي (1) ڇاڪاڻ ته اسان استعمال ڪندڙ مددگار جڳهه استعمال ڪري رهيا آهيون. انپٽ کي اسٽور ڪرڻ جي گهربل جڳهه الگورٿم جي خلائي پيچيدگيءَ ۾ شمار نه ٿي ڪري.