L18. Implement LRU Cache

Поделиться
HTML-код
  • Опубликовано: 5 фев 2025
  • Find problem link, notes under Step 9: takeuforward.o...
    Follow me on socials: linktr.ee/take...

Комментарии • 114

  • @HMBDM1976
    @HMBDM1976 6 месяцев назад +54

    Hi Striver,
    I just wanted to thank you for your incredible DSA tutorials. Your clear explanations and thorough examples have made a huge difference in my understanding and proficiency. Thanks to your videos, I've become very proficient in DSA, which has significantly boosted my confidence and performance in my coding
    Keep up the great work, you're making a big difference!

    • @abhimanyus8757
      @abhimanyus8757 6 месяцев назад

      how it, am started today, did u make notes?

    • @omkarshendge5438
      @omkarshendge5438 5 месяцев назад

      @@abhimanyus8757 notes is compulsory

  • @harshitaninama5235
    @harshitaninama5235 6 месяцев назад +12

    Finally the stack playlist is here!!! thankyou so much!

  • @yashsharma6108
    @yashsharma6108 6 месяцев назад +19

    You are such a hardworking fellow .... seriously you inspire me everyday to work even harder to make myself better day by day...thanku striver😊

    • @DevilJim-p1s
      @DevilJim-p1s 4 месяца назад

      Bro I'm just looking for a review I've just started are you good enough now at the end?

    • @CodewithKing360
      @CodewithKing360 2 месяца назад

      Bhai kitna din lagega is karne me

  • @agrawalmitesh4395
    @agrawalmitesh4395 6 месяцев назад +1

    Gem , just saw your explanation of first 13 min how to do it , and was able to implement it myself , in very less time

  • @THOSHI-cn6hg
    @THOSHI-cn6hg 2 месяца назад +4

    he has started taking yt channel for granted

  • @karthik-varma-1579
    @karthik-varma-1579 4 месяца назад +4

    I Have Learned this Technique in my Operating Systems Subject in Page Replacement Algorithms using Stack
    And Now I am in My 3-1 Semester Again visiting to the LRU cache in Data Structures seems the main use of it and
    Striver Has Very Well Explained it.
    And Now I am able to Do My own for LFU Cache.
    Thank God!!!

  • @_ankit_gupta_
    @_ankit_gupta_ 6 месяцев назад +9

    just going to start older stack playlist
    but got new playlist
    thanks you striver !!!

  • @aryanbundela6031
    @aryanbundela6031 6 месяцев назад +8

    My goat grinding hard at night

  • @akesh500
    @akesh500 6 месяцев назад +15

    Please consider doing a series on Strings.

  • @prithvirathore7436
    @prithvirathore7436 6 месяцев назад +14

    Hello ,Raj sir I hope this comment finds you well,as String is the most important topic in the dsa when it comes to placements,so it's a humble request from you to please make videos on strings .as my placements are going on and arrays and strings are much asked questions

  • @Sumantashee-e3w
    @Sumantashee-e3w 6 месяцев назад +2

    Sir you are a good teacher in DSA.... I'm injoy this playlist
    full stack playlist please 🙏🙏

  • @user2k56
    @user2k56 4 месяца назад +6

    @takeUforward We need a string series brother plz , as soon as possible.#A2Z DSA

  • @harigs72
    @harigs72 2 месяца назад +2

    Oh my goodness! I found the optimal solution of it by myself. I have just come here to see the most optimal solution of it..😅

  • @abhiroopmokshagnabheemineni
    @abhiroopmokshagnabheemineni 4 месяца назад

    Such a beautiful explanation!! Kudos!

  • @swathigp3818
    @swathigp3818 23 дня назад

    Incredible explanation

  • @omkarshendge5438
    @omkarshendge5438 6 месяцев назад +18

    currafterhead→prev = node; this step is missing in the insertafterhead function

    • @AbhinavMohanParaverse
      @AbhinavMohanParaverse 3 месяца назад +2

      Wanted to make a comment to point this out, but you got it!

  • @HEMANTPORWAL-t7d
    @HEMANTPORWAL-t7d 6 месяцев назад

    thank you striver for all these interesting stuffs

  • @kunal5077
    @kunal5077 3 месяца назад

    Very Nice explanation. Eagerly waiting for strings playlist

  • @mohammedrayan2192
    @mohammedrayan2192 6 месяцев назад +2

    Hello raj bhaiya. Thank very much for taking your valuable and effort to teach DSA. Please create a video on Java Collection Frameworks.

  • @Hy_there01
    @Hy_there01 4 месяца назад +2

    This video lasts longer than my relationship 😂

  • @HemangSinghal-op5ep
    @HemangSinghal-op5ep 5 месяцев назад

    Wonderful Explanation

  • @ishan9604
    @ishan9604 6 месяцев назад +1

    Thank You Striver , you really help me in trees and graph series!

  • @KeigoEdits
    @KeigoEdits 6 месяцев назад +3

    I respect you a lot striver literally but please take this suggestion into consideration, dont make videos for the topics you already made earlier
    We are eagerly waiting for strings series and recursion series

  • @swaroopparida0429
    @swaroopparida0429 6 месяцев назад +5

    Hi striver please bring playlist on string

  • @shresthgupta2670
    @shresthgupta2670 6 месяцев назад

    legend is here

  • @Panther_jf
    @Panther_jf 6 месяцев назад

    Bhaiya, would love to learn Binary Trees next, pls❤
    And the stack playlist was amazing as always😍

    • @KeigoEdits
      @KeigoEdits 6 месяцев назад

      Binary trees playlist is already completed, go check out

    • @Panther_jf
      @Panther_jf 6 месяцев назад

      @@KeigoEdits I was talking about the new version of binary trees playlist

  • @ShivamGupta-ei2sv
    @ShivamGupta-ei2sv 3 месяца назад +1

    Bhaiyya I am eagerly waiting for string playlist

  • @KedarBhawthankar
    @KedarBhawthankar 5 месяцев назад

    striver is legend

  • @ParthDabhiOfficial
    @ParthDabhiOfficial Месяц назад

    UNDERSTOOD, Radha Radha

  • @umeshkaushik710
    @umeshkaushik710 4 месяца назад +1

    Hi Bhaiya, Please complete Strings list from the sheet, and I think Strings question might need some more addition.
    When we can except String Playlist out ?

  • @updownftw
    @updownftw Месяц назад +2

    Why is this in the Stack and queue playlist ?

  • @safionweb
    @safionweb 3 дня назад

    Wonderful

  • @kanishasiva6731
    @kanishasiva6731 6 месяцев назад

    Striver 💯🙏💗

  • @souvikbasak4396
    @souvikbasak4396 6 месяцев назад +1

    Bhaiya could you tell beforehand if you going upload any chapter(specsilly graph and dp) playlist which is already available in older playlist , so that instead of the older playlist I could wait a few more days for the newer playlist , like are you going to upload new playlist of graphs and dp , else i will continue with the older one only.

  • @FarziWada-q3r
    @FarziWada-q3r 2 месяца назад +2

    The last video of a2z sheet was added 4 months ago. When will the next videos be uploaded?

  • @deveshagarwal660
    @deveshagarwal660 5 месяцев назад +1

    You mentioned that you will be using a DLL for solving this, but never explained that how did you come to a conclusion of using a DLL.
    It is also important to explain your choice of using any particular data structure or algorithm when someone is solving problems in an interview.

    • @AbhijeetChouhanXD
      @AbhijeetChouhanXD 3 месяца назад +1

      Because we are (i) adding elements to front (ii) removing from the back and adding to front
      In say singly LL, to remove the last element, we would have to travel the list taking O(n) time. Similarly in something like an array, to add an element to the front we would have to shift all the elements, taking O(n) time.

  • @GuptaHarshHemant
    @GuptaHarshHemant 6 месяцев назад

    thanks striver

  • @AbhijeetChouhanXD
    @AbhijeetChouhanXD 3 месяца назад +2

    strings ke videos le aao bhai

  • @venumsingh
    @venumsingh 6 месяцев назад

    Thanks for the video. Which software is used for recording the video?

  • @Jai_Shri_Krishna_Shri_radhe
    @Jai_Shri_Krishna_Shri_radhe 6 месяцев назад +10

    If you Reached 13:35 skip to 20:45
    Again restarted writing pseudocode

    • @akhilesh_ku
      @akhilesh_ku 6 месяцев назад +2

      No , firstly he just wrote pseudo code , for second time it's cpp code😅😂

    • @omkarshendge5438
      @omkarshendge5438 6 месяцев назад

      yup exactly

    • @omkarshendge5438
      @omkarshendge5438 6 месяцев назад

      @@akhilesh_ku the first time also it is cpp heavy only bro.

  • @madhupathak7772
    @madhupathak7772 6 месяцев назад +1

    Hello sir!! Please upload the heaps playlist asap

  • @iamnottech8918
    @iamnottech8918 6 месяцев назад

    mojj krdi bhaiya

  • @karthi2174
    @karthi2174 2 месяца назад +2

    Hello everyone, my placements are starting in March 2025. I have started learning DSA using the TakeUforward SDE sheet and have completed the first 10 problems. However, I was able to understand only 3 of them, and I am struggling to build logic on my own. I am unsure if I am on the right track or where to start. Could you please give me some advice on how to approach solving problems independently and where I should begin? I have programming knowledge but need guidance. I am not aiming to join a big MNC company, but I want to prepare effectively.

    • @AbhinavTries
      @AbhinavTries Месяц назад

      youre doing just fine bro, you've just started, i've been there, im done with 50% of the sheet yet I struggle with intuition, dont worry just keep practicing
      comment your own notes in the code, it'll help in revising
      also whenever you approach a new approach, write it down somewhere

  • @DeadPoolx1712
    @DeadPoolx1712 4 месяца назад

    UNDERSTOOD;

  • @AneeshPal-t7y
    @AneeshPal-t7y 2 месяца назад

    I m just not able to get that when we change order of elements so that it becomes the most recently used , why we are not changing the reference i.e. new location in map as now nodes location is changed....

  • @AbhishekKumar-td5zu
    @AbhishekKumar-td5zu Месяц назад

    understood!!

  • @atulwadhwa192
    @atulwadhwa192 3 месяца назад

    Will there be any difference if we delete from front and insert at the back? In terms of complexity?

  • @ShubhamKumar-vk8me
    @ShubhamKumar-vk8me 5 месяцев назад +1

    Bhaiya String ka video kab tak aajaye, You said you will be uploding it before september

  • @prashlovessamosa
    @prashlovessamosa 6 месяцев назад

    Sir can you please add the solutions in python too
    I have to visit the third party website to read the code.
    Very grateful to you for the series.

  • @NirajPatel-ug2ew
    @NirajPatel-ug2ew 3 месяца назад +1

    my code:
    struct Node {
    int val;
    int key;
    struct Node* next;
    struct Node* prev;
    Node(int value, int x) {
    val = value;
    key = x;
    next = NULL;
    prev = NULL;
    }
    };
    class LRUCache {
    public:
    unordered_map m;
    int size, currsize;
    struct Node* head;
    struct Node* tail;
    LRUCache(int capacity) {
    size = capacity;
    head = NULL;
    tail = NULL;
    currsize = 0;
    }
    int get(int key) {
    if (m[key] == NULL)
    return -1;
    struct Node* temp = m[key];
    if (temp == head) {
    return temp->val;
    }
    if(temp == tail){
    tail = temp->prev;
    }
    temp->prev->next = temp->next;
    if (temp->next != NULL) {
    temp->next->prev = temp->prev;
    }
    temp->next = head;
    head->prev = temp;
    head = temp;
    return head->val;
    }
    void put(int key, int value) {
    if (m[key] == NULL) {
    if (currsize < size) {
    struct Node *temp = new Node(value, key);
    m[key] = temp;
    currsize ++;
    if(head == NULL){
    tail = temp;
    head = temp;
    return;
    }
    temp->next = head;
    head->prev = temp;
    head = temp;
    return ;
    } else {
    struct Node *temp = new Node(value, key);
    m[tail->key] = NULL;
    if(head == tail){
    tail = temp;
    head = temp;
    m[key] = head;
    return ;
    }
    tail = tail->prev;
    temp->next = head;
    head->prev = temp;
    head = temp;
    head->val = value;
    m[key] = head;
    return ;
    }
    } else {
    struct Node* temp = m[key];
    if (temp == head) {
    temp->val = value;
    return;
    }
    if(temp == tail){
    tail = temp->prev;
    }
    temp->prev->next = temp->next;
    if (temp->next != NULL) {
    temp->next->prev = temp->prev;
    }
    temp->next = head;
    head->prev = temp;
    temp->val = value;
    head = temp;
    return ;
    }
    return ;
    }
    };
    /**
    * Your LRUCache object will be instantiated and called as such:
    * LRUCache* obj = new LRUCache(capacity);
    * int param_1 = obj->get(key);
    * obj->put(key,value);
    */

  • @FarziWada-q3r
    @FarziWada-q3r 2 месяца назад +1

    When will be the next video uploaded?

  • @arunbhagat8023
    @arunbhagat8023 Месяц назад +1

    Sir String and Heap Playlist Please....!!!

  • @astitvashukla6556
    @astitvashukla6556 6 месяцев назад

    Bhaiya I am following your DSA series ek baar Java collection kie video daal dijiye bahut help ho jaaegi and bhaiya meine kaafi se question practice kre solve kre but confidence and logic dono build nhi ho paa rha... Need some guidance

  • @theultimatespo...4205
    @theultimatespo...4205 Месяц назад

    Can it be done by using dequeue

  • @rameezalipacific
    @rameezalipacific 6 месяцев назад

    I'm from Pakistan and currently pursuing a degree in software engineering. Alongside my studies, I'm dedicating significant time to mastering data structures and algorithms (DSA). However, I'm uncertain if excelling in DSA alone is enough to secure a job at top tech companies like the one you work for. Do I need to develop additional skills, such as web, app, or game development, to increase my chances of success? Also, could you share your experience on when you started focusing on DSA-was it during your degree or afterward?

  • @curs3m4rk
    @curs3m4rk 5 месяцев назад

    I was able to implement after watching approach of DLL and HashMap,
    Got stuck at the place where I was able to delete LRU from DLL, but could not find out how to remove that node from hashmap.
    Storing key, value pair in DLL Node is a great idea.
    Thanks :)

  • @MO-fg2cm
    @MO-fg2cm 2 месяца назад

    Lru in processors done in maps ?? No way , is this some dsa course then ?

  • @impatientgaming9868
    @impatientgaming9868 Месяц назад

    niceee

  • @arl0817osho
    @arl0817osho 6 месяцев назад

    does it should be afterhead->prev = node in insert funciton also?

  • @abhinavabhi3568
    @abhinavabhi3568 Месяц назад

    Understood

  • @abhishekagrawal3730
    @abhishekagrawal3730 6 месяцев назад +4

    Bhaiya please string dal do

  • @THOSHI-cn6hg
    @THOSHI-cn6hg 4 месяца назад +1

    upload next series cmmon bro

  • @sanchitdeepsingh9663
    @sanchitdeepsingh9663 6 месяцев назад

    thanks sir

  • @DrawwithNavi
    @DrawwithNavi 6 месяцев назад

    cant we just do the same thing using orderedDict, will take similar time and much shorter

  • @sanchitkaul5084
    @sanchitkaul5084 19 дней назад

    Rather than "DeleteNode" a better name of the function would be "DetachNode" .

  • @adhiraj2964
    @adhiraj2964 3 месяца назад

    Striver bhaiya next topic string cover kariye pleaseee

  • @ahmadrasheed2598
    @ahmadrasheed2598 Месяц назад

    C++ Implentation:
    class Node {
    public:
    int key;
    int val;
    Node* prev;
    Node* next;
    Node(int key, int val) : key(key), val(val), prev(nullptr), next(nullptr) {}
    };
    class LRUCache {
    private:
    void deleteNode(Node* node){
    if (node == nullptr) {
    return;
    }
    node->prev->next = node->next;
    node->next->prev = node->prev;
    }
    void insertAtHead(Node* node){
    if (node == nullptr) {
    return;
    }
    node->next = head->next;
    head->next = node;
    node->prev = head;
    node->next->prev = node;
    }
    Node* head = new Node(-1, -1);
    Node* tail = new Node(-1, -1);
    public:
    int capacity = 0;
    unordered_map mp;
    LRUCache(int capacity) {
    head->next = tail;
    tail->prev = head;
    this->capacity = capacity;
    mp.clear();
    }
    int get(int key) {
    if(mp.find(key) != mp.end()){
    // key exists
    Node* node = mp[key];
    deleteNode(node);
    insertAtHead(node);
    return node->val;
    } else{
    // key doesnt exist
    return -1;
    }
    }
    void put(int key, int value) {
    if(mp.find(key) != mp.end()){
    // key exists update
    Node* node = mp[key];
    node->val = value;
    deleteNode(node);
    insertAtHead(node);
    } else{
    Node* node = new Node(key, value);
    // key doesnt exist add
    if(mp.size() == capacity){
    //remove least recent
    Node* lru = tail->prev;
    deleteNode(lru);
    mp.erase(lru->key);
    insertAtHead(node);
    mp[key] = head -> next;
    } else{
    //add
    insertAtHead(node);
    mp[key] = head -> next;
    }
    }
    }
    };

  • @atulwadhwa192
    @atulwadhwa192 3 месяца назад

    My approach using dummy node
    class Node{
    public:
    int key,val;
    Node* next;
    Node* prev;
    Node(int key,int val){
    this->key = key;
    this->val = val;
    next = NULL;
    prev = NULL;
    }
    };
    class LRUCache {
    int size,capacity;
    Node* head;
    Node* tail;
    unordered_map mp;
    public:
    LRUCache(int capacity) {
    size =0;
    this->capacity = capacity;
    head = new Node(-1,-1);
    tail = new Node(-1,-1);
    head->next = tail;
    tail->prev = head;
    }

    void insertNodeAtEnd(Node* node){
    // detachment of node
    Node* prevNode = node->prev;
    Node* nextNode = node->next;
    if(prevNode != NULL) prevNode->next = nextNode; // for new node prevNode would be null
    if(nextNode != NULL) nextNode->prev = prevNode; // for new node nextNode would be null

    // attachment of node at end
    Node* tailPrev = tail->prev;
    tailPrev->next = node;
    node->prev = tailPrev;
    node->next = tail;
    tail->prev = node;
    }

    int get(int key) {
    uj7i8if(mp.find(key) == mp.end())
    return -1;

    Node* node = mp[key];
    insertNodeAtEnd(node);
    return node->val;
    }

    void put(int key, int value) {
    if(mp.find(key)!=mp.end()){
    Node* node = mp[key];
    node->val = value;
    insertNodeAtEnd(node);
    }
    else{
    Node* node = NULL;
    if(size == capacity){
    node = head->next;
    mp.erase(node->key);
    node->key = key;
    node->val = value;
    // insertNodeAtEnd(node);
    }
    else{
    size++;
    node = new Node(key,value);
    // insertNodeAtEnd(node);
    }
    insertNodeAtEnd(node);
    mp[key] = node;
    }
    }
    };
    /**
    * Your LRUCache object will be instantiated and called as such:
    * LRUCache* obj = new LRUCache(capacity);
    * int param_1 = obj->get(key);
    * obj->put(key,value);
    */

  • @Leo-id4uh
    @Leo-id4uh 6 месяцев назад

    code 360 not showing some of the code in the solved list which i was done before, can anyone tell about this

  • @yogeshwardayalagarwal4228
    @yogeshwardayalagarwal4228 6 месяцев назад +1

    Why is it not a part of linked list playlist?

    • @akhilesh_ku
      @akhilesh_ku 6 месяцев назад

      It uses put and get

  • @odorlessflavorless
    @odorlessflavorless 4 месяца назад

    ~ 17:54 'we have touched someone, ... least recently used' --- we have to put in front because it is the most recently used and not the least recently used.

  • @mayanksaini4827
    @mayanksaini4827 6 месяцев назад

    kya haal h striver bhai k👀👀 ?

  • @user-zp1dv4yh5e
    @user-zp1dv4yh5e 4 месяца назад

    Here, you didn't handle the case where the key could be same be value might be different.

  • @SoRandominfo
    @SoRandominfo 6 месяцев назад +17

    U missed LFU cache video?

    • @brokegod5871
      @brokegod5871 6 месяцев назад +4

      He solved it before in an older video, you can see in the playlist

    • @akhilesh_ku
      @akhilesh_ku 6 месяцев назад +8

      See down 😅 , RUclips suggesting you

    • @maverick_8707
      @maverick_8707 5 месяцев назад +1

      He has included in the playlist at last

    • @Tan_cannon
      @Tan_cannon 11 дней назад +1

      ​@@akhilesh_ku😂😂

  • @soumyadey4500
    @soumyadey4500 5 месяцев назад

    can anyone help why should i use "m[key_] = head->next" under get function?

  • @sandeepxt99
    @sandeepxt99 6 месяцев назад

  • @ishan9604
    @ishan9604 6 месяцев назад +1

    First Comment

  • @SanketPatil-gm7pb
    @SanketPatil-gm7pb 6 месяцев назад +3

    sir plz upload the next playlist of heap

  • @Aman-Gairola
    @Aman-Gairola 5 месяцев назад

    he forgot change afterhead->prev = node in insert funciton

  • @razorzeast4133
    @razorzeast4133 6 месяцев назад +1

    I'm the first one

  • @FreeFire-f7e
    @FreeFire-f7e 6 месяцев назад

    Hello sir I will go in IIT ropar what language which I do start?

  • @shantipriya370
    @shantipriya370 6 месяцев назад

    can you pls give python code link..

  • @UttamSingh-vn1yf
    @UttamSingh-vn1yf 3 месяца назад +1

    string krwado

  • @vineet1728
    @vineet1728 6 месяцев назад

    The editor forgot something to clip

  • @SajanKumar-ec2us
    @SajanKumar-ec2us 6 месяцев назад

    please explain c++ written don't write suedo code

    • @studystuff51
      @studystuff51 6 месяцев назад +4

      Please learn how to write code by yourself instead

  • @chiragdusad2015
    @chiragdusad2015 5 месяцев назад

    Stiver where are your hairs going😢
    Looks like our brother is getting older

  • @nikhil_squats
    @nikhil_squats 5 месяцев назад

    curr_after_head->prev=node; in addAfterHead Func

  • @vishal5850
    @vishal5850 10 дней назад

    How about using linked hash map?
    this works!!
    class LRUCache {
    private final int capacity;
    private final LinkedHashMap map;
    public LRUCache(int cap) {
    this.capacity = cap;
    this.map = new LinkedHashMap();
    }
    public int get(int key) {
    if (map.containsKey(key)) {
    int value = map.remove(key);
    map.put(key, value);
    return value;
    }
    return -1;
    }
    public void put(int key, int value) {
    if (map.containsKey(key)) {
    map.remove(key);
    } else if (map.size() >= capacity) {
    Integer eldestKey = map.keySet().iterator().next();
    map.remove(eldestKey);
    }
    map.put(key, value);
    }
    }