Subarrays with K Different Integers - Leetcode 992 - Python

  Рет қаралды 13,915

NeetCodeIO

NeetCodeIO

Күн бұрын

🚀 neetcode.io/ - A better way to prepare for Coding Interviews
🧑‍💼 LinkedIn: / navdeep-singh-3aaa14161
🐦 Twitter: / neetcode1
⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
Problem Link: leetcode.com/problems/subarra...
0:00 - Read the problem
0:30 - Drawing Explanation
14:05 - Coding Explanation
leetcode 992
#neetcode #leetcode #python

Пікірлер: 77
@laumatthew71
@laumatthew71 Ай бұрын
Wow, sliding window technique on steroids... Great explanation, thanks!
@Pegasus02Kr
@Pegasus02Kr Ай бұрын
near decade of algorithm solving, this is the first time i ever heard of 3ptr sliding window... cool
@jans3067
@jans3067 Ай бұрын
Good solution! Two things I noticed: One, we can use an 'if' statement instead of a 'while' for the 'while len(count) < k' line since at any point in the array, the max length of count will be k+1. Two, l_near always points to an element with exactly one occurrence, so in that 'while' loop, we don't actually have to decrement it - we can always just pop it right away. So, we can just simplify the code with: if len(count) > k: count.pop(nums[l_near]) l_near += 1 l_far = l_near
@navyasaiporanki9450
@navyasaiporanki9450 29 күн бұрын
Yes, this is right! Good observation!!. I had the same question when I was going through a scenario and leftNear will always point to an element whose count is 1.
@prom3theus
@prom3theus Ай бұрын
you are able to convey sliding 3 ptr window in the most intuitive way, thank you!
@firstacc5442
@firstacc5442 Ай бұрын
You improved sooo much compared to past tutorials, in these new tutorials, you including your thought process, which matches with all of our thought process at early stages of finding the solution for new problems and also explained why it won't work. Thank you soo much for your contribution to ever lasting best tutorials on youtube! Best of Luck!!
@user-rv1bx8hx4v
@user-rv1bx8hx4v Ай бұрын
Thank you! Great algorithm with 3 pointers 👍👍
@MP-ny3ep
@MP-ny3ep Ай бұрын
Beautiful explanation as always. Thank you
@oneepicsaxguy6067
@oneepicsaxguy6067 Ай бұрын
This can also be solved with one trick and simple 2 pointers You'll realise it is easier to find all subarrays with
@pranav7471
@pranav7471 Ай бұрын
Thats a nice trick! 2 times sliding window to find all sub arrays with
@upamanyumukharji3157
@upamanyumukharji3157 Ай бұрын
You mean subtract
@constantin1693
@constantin1693 Ай бұрын
Great job!! I've definitely heard about this 3 ptr technique, however forget. Thanks a lot for reminding!!
@RHR021397
@RHR021397 Ай бұрын
Thank you for your efforts to provide quality tutorials/solutions. Truly appreciated!
@harshithdesai9989
@harshithdesai9989 Ай бұрын
Great way of explaining the sliding window problem with three pointers.
@user-pv4xn3sg7j
@user-pv4xn3sg7j Ай бұрын
This was just wow man. Loved it 💯
@torvasdh
@torvasdh Ай бұрын
I almost solved this one on my own. Git to the 3 pointers idea but just couldnt work out the fine details. Ddnt help that it was like midnight lol Exciting because I think this was the first hard I almost solved on my own.
@rostislav_vat
@rostislav_vat Ай бұрын
Thank you for such video. With your explanation, this hard problem looks like an easy one!
@syedinayath4547
@syedinayath4547 Ай бұрын
Damn! Thanks for making the explanation so simple! I understood it in one go.
@itachid
@itachid Ай бұрын
One thing to take care of is that the while loop which checks the length of the hash map should always come in first. I think that maybe this is because of the fact that the priority to check the length of the hash map is simply higher than the priority to check if we have more than one occurrence of a particular number.
@aaron-uz6pc
@aaron-uz6pc Ай бұрын
Great explanation, thanks!
@santanu29
@santanu29 Ай бұрын
Great solution. I don't know how you come up with this.
@viveksoni3269
@viveksoni3269 Ай бұрын
Nice Explanation!!
@johnniewalkerjohnniewalker2459
@johnniewalkerjohnniewalker2459 Ай бұрын
interesting solution @NeetCodeIO.Well done!!!
@satyamjha68
@satyamjha68 Ай бұрын
Solved it !
@MustafaAli-hr2vp
@MustafaAli-hr2vp Ай бұрын
this explanation is way more intuitive than the editorial
@bahabouali6886
@bahabouali6886 Ай бұрын
the best leetcode videos you can find
@pastori2672
@pastori2672 Ай бұрын
all thanks to you i was capable of solving this problem using the hashmap last index trick and a sliding window
@pastori2672
@pastori2672 Ай бұрын
wow even the same 3ptrs technique
@yang5843
@yang5843 Ай бұрын
The fact that companies ask this in real interviews
@vishaalagartha1658
@vishaalagartha1658 Ай бұрын
Nice! But I think a simpler way would be to use the 'At Most k, At Most k - 1' technique right?
@zziye810
@zziye810 Ай бұрын
correct
@kapilkhandelwal48
@kapilkhandelwal48 Ай бұрын
Yes it is more intuitive
@satyamjha68
@satyamjha68 Ай бұрын
Yup
@MustafaAli-hr2vp
@MustafaAli-hr2vp Ай бұрын
true, but this is faster since it's one pass only
@De1n1ol
@De1n1ol Ай бұрын
@@MustafaAli-hr2vp it doesn’t matter. Both are O(n)
@erminiottone
@erminiottone Ай бұрын
atMost(k) - atMost(k-1) is way easier to code and understand but I really appreciate this other solution because I learned a new pattern :)
@get_out_it
@get_out_it Ай бұрын
your skills are topnotch
@michael._.
@michael._. Ай бұрын
damn I forgot about 3 pointers sliding window technique, gorgeous solution as always
@Splish_Splash
@Splish_Splash Ай бұрын
Thanks to you and hints I was able to solve today's hard question (2444)
@swanv951
@swanv951 Ай бұрын
Is it true that for any subarray problems, an approach with window ending at a given index always works efficiently (and so, we never need to think about the alternative approach where the window starts at some index )?
@SC2Edu
@SC2Edu Ай бұрын
Wow, cool cool cool!
@khatriiedits3606
@khatriiedits3606 Ай бұрын
How did you come with the counting part?
@omkarjadhav6183
@omkarjadhav6183 Ай бұрын
I used to count subarry with less than equal to k and also less than equal to k -1 and then subtract the result to get the answer
@EduarteBDO
@EduarteBDO Ай бұрын
After 4 hours I gave up on this problem and came here. After watching it I think that I would answer by myself if I spent a month.
@DroidHolicOfficial
@DroidHolicOfficial Ай бұрын
Another way to solve is like this - Subarrays with "EXACTLY" K Different Integers = Subarrays with 5 Subarrays So, subarrays with Exactly K different Integers = 12 - 5 => 7 So, we can iterate over the array twice, once to find number of subarrays with at most K different integers, and once to find the Number of subarrays with at most K - 1 different integers. And for both, we will use Sliding Window technique. In this way, the overall time complexity will be O(2N) => O(N) Here is my explanation on Leetcode for the same -> leetcode.com/problems/subarrays-with-k-different-integers/discuss/2582425/Python-Sliding-Window-%2B-Dictionary This is a technique we can use on other Sliding Window Problems as well which ask us to find subarrays with "EXACTLY" K something. For example this problem -> leetcode.com/problems/binary-subarrays-with-sum/ Or this problem -> leetcode.com/problems/count-number-of-nice-subarrays/
@staywithmeforever
@staywithmeforever Ай бұрын
i dont understand how people come up with getting no of sub arrays with two pointer like subtracting them we get subarrays I stuck in thinking but I know it works and know why does it work but still I can code myself in new problem for this too I thought 3 pointer but don't know how do make subarrays and over complicated taking 2 hashmaps and shifting farpointer and can even pass the base cases
@JAson-ps2ug
@JAson-ps2ug Ай бұрын
great one pass solution, is (k) - (k-1) solution good enough for interview? I can only come up with that solution
@gryffindor6409
@gryffindor6409 Ай бұрын
hi neetcode, where r videos for todays contest and DCC?
@mhsunny123
@mhsunny123 Ай бұрын
atMost trick neetcode did few videos ago for Leetcode 930. Binary Subarrays With Sum make implementation easy.
@prabhas2445
@prabhas2445 Ай бұрын
another easy way, atmost(k) - atmost(k-1) , atmost(k) can be easily done by sliding window
@slizverg23
@slizverg23 Ай бұрын
Now that I’ve started to think that I begin to understand that “sliding window” thing, Neetcode says: “Ok, now we are gonna have two left pointers…”:)))
@Versatile_Naveen
@Versatile_Naveen Ай бұрын
If we swap While loops inside a for loop it FAILSSSS why?????
@pjpodx
@pjpodx Ай бұрын
did you write code in python on google interview ?
@NeetCodeIO
@NeetCodeIO Ай бұрын
yes
@samplayz9557
@samplayz9557 Ай бұрын
Neetcode >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Everyone
@ethanphelps5308
@ethanphelps5308 Ай бұрын
anyone have a list of sliding 3 ptr window problems?
@ethanphelps5308
@ethanphelps5308 Ай бұрын
Count Vowel Substrings of a String is a good one
@namanshah2688
@namanshah2688 Ай бұрын
for someone who codes in cpp here is the solution class Solution { public: int subarraysWithKDistinct(vector& nums, int k) { int n = nums.size(); int l_far = 0,l_near = 0,r = -1,ans = 0; unordered_map umap; while(++r < n){ umap[nums[r]]++; while(umap.size() > k){ umap[nums[l_near]]--; if(umap[nums[l_near]] == 0) umap.erase(nums[l_near]); l_near++; l_far = l_near; } while(umap[nums[l_near]] > 1){ umap[nums[l_near]]--; l_near++; } if(umap.size() == k){ ans = ans+(l_near-l_far+1); } } return ans; } };
@tarifahmed4956
@tarifahmed4956 Ай бұрын
why you initialized r=-1?
@namanshah2688
@namanshah2688 Ай бұрын
@@tarifahmed4956 i used it to make pre increment work in first while loop. U can also use r=0 and increment r at the end of first while loop
@premranjan4440
@premranjan4440 Ай бұрын
I just realised 2019 was 5 years ago!
@NeetCodeIO
@NeetCodeIO Ай бұрын
Yeah I'm slowly becoming a boomer. I still think of myself as a newgrad
@logchamption
@logchamption Ай бұрын
class Solution: def subarraysWithKDistinct(self, nums: List[int], k: int) -> int: def subA(nums,k): d = defaultdict(int) res = 0 l = 0 for r in range(len(nums)): d[nums[r]] += 1 while len(d) > k: d[nums[l]] -= 1 if d[nums[l]] == 0: del d[nums[l]] l += 1 res += r - l + 1 return res return subA(nums,k)-subA(nums,k-1)
@ks-xh4fq
@ks-xh4fq Ай бұрын
where is todays's video
@shreehari2589
@shreehari2589 Ай бұрын
While else also works
@CS_n00b
@CS_n00b Ай бұрын
Maybe I’m spending too much time doing leetcode…
@Munchen888
@Munchen888 Ай бұрын
NeetCode, pls explain 12:27 where from the result=6 is? Firstly, 1-0+1 = 2(6-2=4). Ok. Further 2 - 0 + 1 != 4 🤔 Other explanation is ok. But this moment I can’t catch …
@weihyac
@weihyac Ай бұрын
Position One: FAR.position = NEAR.position = 0 | 0-0+1=1 (count = 1) Position Two: FAR.position = 0, NEAR.position = 1 | 1-0+1=2 (incrementing count by 2 gives us 3) Position Three: FAR.position = 0, NEAR.position = 2 | 2-0+1=3 (incrementing count further by 3 gives us 6)
@Munchen888
@Munchen888 Ай бұрын
@@weihyac . Thank you for explanation.
@CTAAG-zp9nm
@CTAAG-zp9nm Ай бұрын
class Solution { public int subarraysWithKDistinct(int[] nums, int k) { HashMap map = new HashMap(); int res = 0; int l_far = 0, l_near = 0, r = 0; while (r < nums.length) { map.put(nums[r], map.getOrDefault(nums[r], 0) + 1); while (map.size() > k) { map.put(nums[r], map.getOrDefault(nums[r], 0) - 1); if (map.get(nums[r]) == 0) { map.remove(nums[r]); } if(l_near < nums.length ) l_near+=1; l_far = l_near; } while ( map.get(nums[l_near]) != null || map.get(nums[l_near]) > 1) { map.put(nums[r], map.getOrDefault(nums[r], 0) - 1); if(l_near < nums.length ) l_near+=1; } if (map.size() == k) { res += (l_near - l_far + 1 ); } r++; } return res; } } i am getting error can any 1 point out why and how to solvey them
@spyboy0076
@spyboy0076 Ай бұрын
First
Minimum Falling Path Sum II - Leetcode 1289 - Python
31:44
NeetCodeIO
Рет қаралды 8 М.
Stupid man 👨😂
00:20
Nadir Show
Рет қаралды 28 МЛН
Sum of Subarray Minimums - Leetcode 907 - Python
18:51
NeetCodeIO
Рет қаралды 25 М.
researchers hack the PS4 with a 20 year old bug
12:21
Low Level Learning
Рет қаралды 22 М.
Maximum Profit in Job Scheduling - Leetcode 1235 - Python
14:45
NeetCodeIO
Рет қаралды 26 М.
Find the Safest Path in a Grid - Leetcode 2812 - Python
26:40
NeetCodeIO
Рет қаралды 9 М.
Minimum Cost to Hire K Workers - Leetcode 857 - Python
19:01
NeetCodeIO
Рет қаралды 10 М.
I gave 127 interviews. Top 5 Algorithms they asked me.
8:36
Sahil & Sarra
Рет қаралды 576 М.
Remove K Digits - Leetcode 402 - Python
14:36
NeetCode
Рет қаралды 55 М.
Number of Students Unable to Eat Lunch - Leetcode 1700 - Python
8:22