Тёмный

Time Based Key-Value Store - Leetcode 981 - Python 

NeetCode
Подписаться 764 тыс.
Просмотров 92 тыс.
50% 1

🚀 neetcode.io/ - A better way to prepare for Coding Interviews
🐦 Twitter: / neetcode1
🥷 Discord: / discord
🐮 Support the channel: / neetcode
⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
💡 CODING SOLUTIONS: • Coding Interview Solut...
💡 DYNAMIC PROGRAMMING PLAYLIST: • House Robber - Leetco...
🌲 TREE PLAYLIST: • Invert Binary Tree - D...
💡 GRAPH PLAYLIST: • Course Schedule - Grap...
💡 BACKTRACKING PLAYLIST: • Word Search - Backtrac...
💡 LINKED LIST PLAYLIST: • Reverse Linked List - ...
💡 BINARY SEARCH PLAYLIST: • Binary Search
📚 STACK PLAYLIST: • Stack Problems
Problem Link: neetcode.io/problems/time-bas...
0:00 - Read the problem
0:35 - Drawing Explanation
10:30 - Coding Explanation
leetcode 981
This question was identified as an interview question from here: github.com/xizhengszhang/Leet...
#coding #interview #python
Disclosure: Some of the links above may be affiliate links, from which I may earn a small commission.

Наука

Опубликовано:

 

26 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 70   
@halahmilksheikh
@halahmilksheikh 2 года назад
That's so interesting. I didn't know you could find the closest elements this way if the value being searched for doesn't exist in a binary search. Never would have thought of that.
@Eren-bb8qx
@Eren-bb8qx 9 месяцев назад
Instead of setting res in every step; if the element not found in the search loop, you can also return the element that "r" points to. Explanation: In the last step of the loop, all l,m,r pointers will be showing the same position. If the target is bigger than m, then r is the biggest element that is less than target. If target is less than m, then r will be pointed m-1 and r is the biggest element that is less than target. resulting code: def get(self, key: str, timestamp: int) -> str: values = self.keyStore.get(key, []) l, r = 0, len(values) - 1 while l timestamp: r = m - 1 else: return values[m][0] if r!=-1: return values[r][0] return ""
@ashkan.arabim
@ashkan.arabim Месяц назад
I watched the video for this one specifically because I wanted to see a nicer way of finding a close value! Gotta love this guy.
@symbol767
@symbol767 2 года назад
Damn I love this problem and your explaination, thank you man! Liked again and commenting to support!
@baolingchen2891
@baolingchen2891 2 года назад
Very concise solution and easy to understand. Thank you!
@gregorvm7443
@gregorvm7443 Год назад
I was racking my brain with this, didn't read or realize that timestamp was in increasing order, I even implement a sort method in the set so that the array was sorted and the get could be done in log n time, but it wasn't enough some test failed because the time keep running out, then I saw that part of the video expecting some fancy algorithm and was like ._. oh? it's already sorted.
@boojo3
@boojo3 10 месяцев назад
yea me2 lol i tried sorting it
@eshanpandey4186
@eshanpandey4186 5 месяцев назад
same, i also failed after 44/53 test cases because of sorting
@yugioh8810
@yugioh8810 Месяц назад
in this case I think you can use a priority queue implemented with a binary search tree. you would be able to have get in O(logn) and insert in O(logn)
@Dhruvbala
@Dhruvbala 3 месяца назад
Nice. And for binary search, could just use right pointer at end of loop -- as that should be the closest value less than target
@dianav357
@dianav357 2 года назад
i hated this problem but ur explanation made it less complicated ty
@jonnatanortiz7159
@jonnatanortiz7159 Год назад
Great explanation, thank you!
@adeniyiadeboye3300
@adeniyiadeboye3300 2 года назад
you are a leetcode legend!...i have watched a couple of your leetcode videos solution
@NeetCode
@NeetCode 2 года назад
Thanks :)
@krateskim4169
@krateskim4169 Год назад
Awesome explanation
@Jason-be2cy
@Jason-be2cy 2 года назад
I really love your videos! Could you upload a video for "843. Guess the Word"? (Top google question)
@iamnoob7593
@iamnoob7593 16 дней назад
Thanks neetcode , Presentation is really good
@LavanVivekanandasarma
@LavanVivekanandasarma Год назад
The goat fr
@nishiketsingh5283
@nishiketsingh5283 29 дней назад
I got this problem on an interview, if only I was subscribed to you back then.
@nguyentuan1990
@nguyentuan1990 17 дней назад
for real? can you share which company?
@nishiketsingh5283
@nishiketsingh5283 17 дней назад
@@nguyentuan1990 it was for soti
@arkamukherjee457
@arkamukherjee457 2 года назад
"Questions to ask in real interviews" - I'd love if you share thoughts on this topic on other problems too! In my experience, it makes a big difference, especially if you can't solve a problem during the interview.
@netratuse503
@netratuse503 11 месяцев назад
Yes much needed. Questions to ask during interview
@naimeimran3247
@naimeimran3247 2 года назад
Thanks
@trungthanhbp
@trungthanhbp 2 года назад
nice bro
@sidazhong2019
@sidazhong2019 Год назад
I don't wanna abuse Python too much to make everything so easy. lol
@user-zenu0706
@user-zenu0706 3 месяца назад
So we assume the input timestamp(s) are always ascending for each key/value? For example they cannot give you ["foo", "bar", 4] then ["foo", "bar", 1]?
@user-qt1lm3yf5j
@user-qt1lm3yf5j Месяц назад
yeah i was able to solve this myself once i saw that constraint.
@enterprisecloudnative8757
@enterprisecloudnative8757 2 года назад
i don't understand why the nested part can't be another hashmap like a nested dictionary. in the nested dictionary, timestamp is a string
@frankl1
@frankl1 2 года назад
It's because a dictionary is unordered, and you need an ordered data structure in order to apply binary search
@enterprisecloudnative8757
@enterprisecloudnative8757 2 года назад
@@frankl1 some languages dict is ordered ie python3
@frankl1
@frankl1 2 года назад
@@enterprisecloudnative8757 I didn't know that, do you have any reference to share ?
@toolworks
@toolworks 2 года назад
@@frankl1 Dict is ordered, but you aren't supposed to rely on that. It used to be unordered, and OrderedDict exists for ordered dictionaries. It was a later patch which changes how dicts are implemented in Python and now they are ordered by default sort of by accident. I recommend the talk "Modern Dictionaries" by Raymond Hettinger.
@dheerajchidambaranathan
@dheerajchidambaranathan 2 года назад
Why did you choose to save the zeroth element of the value dictionary and not the 1st which satisfied the condition of time stamp being less than or equal to queried time stamp?
@hwang1607
@hwang1607 8 месяцев назад
The 0th element is the value that you return but the 1st value is the timestamp
@ece116pranaykumar4
@ece116pranaykumar4 2 года назад
mapmp; void set(string key, string value, int timestamp) { mp[key].push_back({value,timestamp}); } string get(string key, int timestamp) { auto it=mp[key]; int high=it.size()-1; int low=0; string ans=""; while(low
@rishabhthakur2270
@rishabhthakur2270 Год назад
there seems to be a problem in your get function, you missed to check if the given key actually exists in the map or not here, have a look at my code which is almost similar to yours but with the check void set(string key, string value, int timestamp) { mp[key].push_back(make_pair(value,timestamp)); } string get(string key, int timestamp) { // run binary search on the value list if(mp.find(key)==mp.end())return ""; string res=""; int l=0,h=mp[key].size()-1; while(l
@ameynaik2743
@ameynaik2743 2 года назад
Nice solution. Can you please do a video on 68. Text Justification from leetcode?
@NeetCode
@NeetCode 2 года назад
Sure, will try to do it this week
@jmarti1997jm
@jmarti1997jm 2 года назад
@@NeetCode have you given text justification a try haha
@metarus208
@metarus208 2 года назад
what is the justification for this request? :P
@TheQuancy
@TheQuancy Год назад
Can anyone explain why we write the binary search that way? I usually have 3 conditions in my binary search
@sf-spark129
@sf-spark129 Год назад
Well, think of this way. The goal of this problem is to find the value that matches the given timestamp. If that given timstamp doesn't exit in the hashMap's key, then the closest one. You can write it your way: if values[mid][1] < timestamp: res = values[mid][0] l = m + 1 elif values[mid][1] < timestamp: r = m -1 else: res = values[mid][0] break Or you can do it NeetCode's way: if values[mid][1]
@indhumathi5846
@indhumathi5846 Год назад
understood
@gurazeez
@gurazeez Год назад
if I write values =self.store[key] instead of self.store.get(keys,[]), the run time difference is huge, why is get() so much faster ??
@mastermax7777
@mastermax7777 Год назад
leetcode run time is not precise. Did you run it multiple times and its really different? It doesnt make much sense
@boli7171
@boli7171 4 месяца назад
The answer will be wrong if I gave while (l
@awesomedavid2012
@awesomedavid2012 3 месяца назад
it will be wrong in the case where the exact value doesn't exist. You seem to never return the closest value below as the problem desires.
@goodguy6589
@goodguy6589 Год назад
What about java code...?
@grhaonan
@grhaonan 9 месяцев назад
I am getting time limit exceeded with this solution or it is just me? thanks
@user-bo3qg5gr8l
@user-bo3qg5gr8l 8 месяцев назад
Same time limit exceeded
@kuoyulu6714
@kuoyulu6714 11 месяцев назад
"I don't want to make it too easy"
@Princebharti9971
@Princebharti9971 Год назад
I am getting TLE for same solution in Swift, anyone can help ? I have written down the solution below. class TimeMap { private var dictionary = [String: [(Int,String)]]() init(){} func set(_ key: String, _ value: String, _ timestamp: Int) { var list = dictionary[key] ?? [] list.append((timestamp, value)) dictionary[key] = list } func get(_ key: String, _ timestamp: Int) -> String { var result = "" let array = dictionary[key, default: []] var left = 0, right = array.count-1 while left
@TarunKumar-qs9dj
@TarunKumar-qs9dj Год назад
Your language could be the hurdle, change your language to some mainstreams language
@nnamdiadom8256
@nnamdiadom8256 2 года назад
Time Limit Exceeded with same solution
@user-ib3ev5pl2t
@user-ib3ev5pl2t 4 месяца назад
I think that problem should be easy
@Zynqify
@Zynqify Год назад
of course for lists that are much much bigger in size the binary search option is still better with a time complexity of O(log n), but i feel like there's a much simpler approach that is O(n) at worst. since the timestamps are always in increasing order, we can iterate through the timestamps backwards and return the value whose timestamp is less than or equal to the input timestamp, otherwise return an empty string. class TimeMap: def __init__(self): self.pairs = {} def set(self, key: str, value: str, timestamp: int) -> None: if key in self.pairs: self.pairs[key].append((value, timestamp)) else: self.pairs[key] = [(value, timestamp)] def get(self, key: str, timestamp: int) -> str: if key not in self.pairs: return "" else: for values in reversed(self.pairs[key]): if values[1]
@JoseAntonio-sn6sf
@JoseAntonio-sn6sf Год назад
I think there is no need to use binary search because according to the condition, the timestamps are strictly set in increasing order, so the right most index has the max timestamp which you can compare it with the current timestamp, so you could condense the get function like: def get(self, key, timestamp): res = " " values = self.store.get(key, []) if values[-1][1]
@jointcc2
@jointcc2 Год назад
the whole point of binary search is to continually search for the nearest smallest value, if the given timestamp is smaller does that mean the nearest smallest value cannot be found? I don't think so.
@JoseAntonio-sn6sf
@JoseAntonio-sn6sf Год назад
@@jointcc2 oh yeah i though that the gets operations where going to ask for time values in increasing order as the example but in reality it could ask for any time value
@masternobody1896
@masternobody1896 2 года назад
I dont get it
@dev_among_men
@dev_among_men 2 года назад
Hash map to store all the values for a key and binary search to find time stamp as list is sorted
@masternobody1896
@masternobody1896 2 года назад
@@dev_among_men still dont get it
@dev_among_men
@dev_among_men 2 года назад
Try to do this question, Find index of element in sorted array if not present get index of the number just smaller than it.
@hemantkarasala5767
@hemantkarasala5767 2 года назад
@@masternobody1896 would help if you mentioned which aspect you didn't get.
@masternobody1896
@masternobody1896 2 года назад
@@hemantkarasala5767 i guess i need to do some basic leetcode to understand
@sheikhmkrifat7749
@sheikhmkrifat7749 3 месяца назад
This problem statement is really badly written
@mastermax7777
@mastermax7777 Год назад
this is the answer that chatgpt gave me, and its shorter and 95% faster than every other answer... import bisect from collections import defaultdict class TimeMap: def __init__(self): self.data = defaultdict(list) def set(self, key, value, timestamp): self.data[key].append((timestamp, value)) def get(self, key, timestamp): values = self.data[key] index = bisect.bisect_right(values, (timestamp, chr(127))) if index: return values[index - 1][1] return "" edit: I understand why he didnt do it this way now, he said "he didnt want to abuse java" and wanted it to be more similar to other languages
@gugolinyo
@gugolinyo Год назад
At first I thought of a TreeMap. Then I saw your video and thought otherwise. Then I realized I discarded my initial idea just because I thought that to be something like a brute force solution. Taking advantage of the fact that TreeMap implements NavigableMap I used floorEntry() to spare myself all that binary search clutter.
Далее
Task Scheduler - Leetcode 621 - Python
17:07
Просмотров 153 тыс.
Rotting Oranges - Leetcode 994 - Python
12:19
Просмотров 92 тыс.
Новые iPhone 16 и 16 Pro Max
00:42
Просмотров 1,1 млн
Java Is Better Than Rust
42:14
Просмотров 90 тыс.
How I would learn Leetcode if I could start over
18:03
Просмотров 368 тыс.
8 patterns to solve 80% Leetcode problems
7:30
Просмотров 267 тыс.
The Algorithm Behind Spell Checkers
13:02
Просмотров 408 тыс.
LARGEST RECTANGLE IN HISTOGRAM - Leetcode 84 - Python
17:20
APPLE дают это нам БЕСПЛАТНО!
1:01
Просмотров 754 тыс.
ЗАБЫТЫЙ IPHONE 😳
0:31
Просмотров 12 тыс.