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!
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!!!
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
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
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 ?
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.
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.
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.
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.
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
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....
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
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?
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 :)
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;
~ 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.
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); } }
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!
how it, am started today, did u make notes?
@@abhimanyus8757 notes is compulsory
Finally the stack playlist is here!!! thankyou so much!
You are such a hardworking fellow .... seriously you inspire me everyday to work even harder to make myself better day by day...thanku striver😊
Bro I'm just looking for a review I've just started are you good enough now at the end?
Bhai kitna din lagega is karne me
Gem , just saw your explanation of first 13 min how to do it , and was able to implement it myself , in very less time
he has started taking yt channel for granted
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!!!
just going to start older stack playlist
but got new playlist
thanks you striver !!!
old is better
My goat grinding hard at night
Please consider doing a series on Strings.
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
Sir you are a good teacher in DSA.... I'm injoy this playlist
full stack playlist please 🙏🙏
@takeUforward We need a string series brother plz , as soon as possible.#A2Z DSA
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..😅
Such a beautiful explanation!! Kudos!
Incredible explanation
currafterhead→prev = node; this step is missing in the insertafterhead function
Wanted to make a comment to point this out, but you got it!
thank you striver for all these interesting stuffs
Very Nice explanation. Eagerly waiting for strings playlist
Hello raj bhaiya. Thank very much for taking your valuable and effort to teach DSA. Please create a video on Java Collection Frameworks.
This video lasts longer than my relationship 😂
Wonderful Explanation
Thank You Striver , you really help me in trees and graph series!
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
Hi striver please bring playlist on string
legend is here
Bhaiya, would love to learn Binary Trees next, pls❤
And the stack playlist was amazing as always😍
Binary trees playlist is already completed, go check out
@@KeigoEdits I was talking about the new version of binary trees playlist
Bhaiyya I am eagerly waiting for string playlist
striver is legend
UNDERSTOOD, Radha Radha
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 ?
Why is this in the Stack and queue playlist ?
Wonderful
Striver 💯🙏💗
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.
The last video of a2z sheet was added 4 months ago. When will the next videos be uploaded?
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.
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.
thanks striver
strings ke videos le aao bhai
Thanks for the video. Which software is used for recording the video?
If you Reached 13:35 skip to 20:45
Again restarted writing pseudocode
No , firstly he just wrote pseudo code , for second time it's cpp code😅😂
yup exactly
@@akhilesh_ku the first time also it is cpp heavy only bro.
Hello sir!! Please upload the heaps playlist asap
mojj krdi bhaiya
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.
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
UNDERSTOOD;
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....
understood!!
Will there be any difference if we delete from front and insert at the back? In terms of complexity?
Bhaiya String ka video kab tak aajaye, You said you will be uploding it before september
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.
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);
*/
When will be the next video uploaded?
Sir String and Heap Playlist Please....!!!
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
Can it be done by using dequeue
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?
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 :)
Lru in processors done in maps ?? No way , is this some dsa course then ?
niceee
does it should be afterhead->prev = node in insert funciton also?
Understood
Bhaiya please string dal do
upload next series cmmon bro
thanks sir
cant we just do the same thing using orderedDict, will take similar time and much shorter
Rather than "DeleteNode" a better name of the function would be "DetachNode" .
Striver bhaiya next topic string cover kariye pleaseee
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;
}
}
}
};
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);
*/
code 360 not showing some of the code in the solved list which i was done before, can anyone tell about this
Why is it not a part of linked list playlist?
It uses put and get
~ 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.
kya haal h striver bhai k👀👀 ?
Here, you didn't handle the case where the key could be same be value might be different.
U missed LFU cache video?
He solved it before in an older video, you can see in the playlist
See down 😅 , RUclips suggesting you
He has included in the playlist at last
@@akhilesh_ku😂😂
can anyone help why should i use "m[key_] = head->next" under get function?
❤
First Comment
sir plz upload the next playlist of heap
he forgot change afterhead->prev = node in insert funciton
I'm the first one
Hello sir I will go in IIT ropar what language which I do start?
start with c and continue with c++
start with c++ itself
cpp
Hindi
@@Akshay-c8g I am not understand what do you tell
can you pls give python code link..
string krwado
The editor forgot something to clip
please explain c++ written don't write suedo code
Please learn how to write code by yourself instead
Stiver where are your hairs going😢
Looks like our brother is getting older
curr_after_head->prev=node; in addAfterHead Func
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);
}
}