It's very hard to come up with the optimal algorithm when you hear this problem for the first time on your interview. People who are giving this question on the interview and expect to get an optimal solution, shouldn't be performing interviews at all.
@brandonm10888 жыл бұрын
I was amazed for the longest time on how you write so well mirror until I figured you most likely are not left handed. Really clever presentation!
@HughGuiney7 жыл бұрын
DID ANYONE ELSE NOTICE THE INDIVIDUAL CHARACTERS FALLING DOWN FROM THE BOARD AFTER HE SPRAYED IT AT THE END??? 15:52
@arjunkashyap88964 жыл бұрын
6 seconds into video: "Wait am I watching a coding interview tutorial ?!?!" Data Structures and Algos are such complex and mind numbing topics. I love the fact that you added humor to such complicated topics. Its good to be laughing while learning. It just made learning a lot more enjoyable. SUBSCRIBED
@pspsora8 жыл бұрын
i need a t-shirt that says "function popThatShit(){}"
@sebastiansiatkowski37208 жыл бұрын
Your solution is correct, but the magical change at 15:45 is suboptimal - it can lead to having multiple entries for the same height at the top of your stack. For example input [1,2,1] leads to having [0,1] and [1,1] in your stacks at the end of the for loop. A better solution would be to add "|| h > hStack[hStack.length - 1]" to the if statement you removed. Just wanted to chime in since I just went through all your Coding Interview Problem videos while preparing for my coding interview. They were a great resource, thanks for all the effort you put into those!
@itizir8 жыл бұрын
Was going to make a similar remark... In fact it looks like it would even potentially give wrong answers! Take [ 1, 2, 3, 2, 1 ]: the largest rectangle is 2x3 = 6, but with the given code, the two 2s would be counted as part of separate rectangles in the stack (of size 2x1 and 2x2), so the code would think the 1x5 rectangle is bigger. Eh. Or is it me who's missing something? :P
@itizir8 жыл бұрын
Ah no indeed, I'm the one who missed something: the size is calculated keeping the very last index accessed, so it will indeed see the correct rectangle... My bad!
@sirnawaz6 жыл бұрын
@Sebastian: Wow.. I was thinking exactly the same thing.. and in fact, I corrected this part: repl.it/repls/WoefulFavorableCustomer And then I started looking for a comment, hoping that someone else (apart from me) would pointed out this.. and I found yours. Thanks for confirming that WE are right.
@j-espresso Жыл бұрын
Well done and thank you Jackson. You made it so intuitive. Java version is here is for critic 🙂 public int findLargestRectangle(int[] heights) { if (heights.length == 0) return 0; int currentPosition = 0, tempPos = Integer.MIN_VALUE, maxArea = Integer.MIN_VALUE; Deque positionStack = new ArrayDeque(); Deque heightStack = new ArrayDeque(); for (currentPosition = 0; currentPosition < heights.length; currentPosition++) { int currentHeight = heights[currentPosition]; if (heightStack.isEmpty() || currentHeight > heightStack.peek()) { positionStack.push(currentPosition); heightStack.push(currentHeight); } else if (currentHeight < heightStack.peek()) { while (!heightStack.isEmpty() && currentHeight < heightStack.peek()) { tempPos = positionStack.pop(); maxArea = Math.max(heightStack.pop() * (currentPosition - tempPos), maxArea); } heightStack.push(currentHeight); positionStack.push(tempPos); } } while (!heightStack.isEmpty()) { tempPos = positionStack.pop(); maxArea = Math.max(heightStack.pop() * (currentPosition - tempPos), maxArea); } return maxArea; }
@manusharma58173 жыл бұрын
probably the best explanation on KZbin even today. Thanks, man.
@crankyinmv3 жыл бұрын
Thanks for this. I love seeing a solution in JS. I managed to do this problem using a tortured DP-ish solution which kept track of rectangle areas and heights. Nice to know there's a sane solution.
@chicken61808 жыл бұрын
"Uncut Jackson... unrelated to my parents decision"... SO subtle but i had to listen again to see if that was what I thought it was
@ExtinityOfficial7 жыл бұрын
Just got a something new in an interview i haven't seen before. Find the amount of magic squares in a given rectangle 2d array. Took me a while to figure out the optimal way to do it
@snejati868 жыл бұрын
Make some promises and you might get your callbacks .... I'm sad about this joke.
@jackson-gabbard8 жыл бұрын
That's not a joke I made is it? I agree that it's awful.
@stasvpavlov8 жыл бұрын
Sina Nejati I can tell that you are probably a really l "fun" guy.
@bhaumin7 жыл бұрын
I await'ed at a sink
@iveted47384 жыл бұрын
@@jackson-gabbard dude why'd you stop making these videos?
@MrNargleflex8 жыл бұрын
Hey this video rocks! I had been puzzling for a while on how to do this, and the best I could do while getting a correct answer was O(n^2) time complexity, which is garbo. Thanks for the great explanation!
@DarcMagikian2 жыл бұрын
Is this not also O(n^2)? since there's a while loop inside a for loop?
@ranzort5 жыл бұрын
All your vids are so good I have learned to tolerate bad BGM
@lachlanhillman74694 жыл бұрын
You don't need the heights stack. Just modify the original heights array with the new reduced height values.
@sureshchaudhari44658 ай бұрын
Jason Stathum from action hero to Software engineering he learned everything huge respect :P
@arpitjangir33492 жыл бұрын
Okay so I played the video and I had to rewind in first 5 seconds
@spiffmonkey17 жыл бұрын
Not the most clear explanation (which might be a good thing) but makes people like us have to think and understand more about how it works.
@Shaddymaze5 жыл бұрын
High quality all around. Well done, sir! You just earned yourself a sub.
@naythaniel8 жыл бұрын
+Jackson Gabbard, JavaScript has Maps and Sets now (and WeakMaps and WeakSets), so not just 2 anymore. Although probably you knew that already.
@marionwelton50507 жыл бұрын
Here’s another approach (literally: bottom up rather than left to right). In pseudo code. DEFINE FUNCTION maxSize(INT start, INT stop) RETURNS INT LOCAL INT i IF start
@marionwelton50507 жыл бұрын
Oops. IF start>stop RETURN 0. Sorry.
@thequantartist4 жыл бұрын
Just discovered, this channel. Simply love it!
@vanjajaja15 жыл бұрын
“i, like most people who work in java, dont know java.” i can relate.
@ViniciusRodriguesFilenga9 ай бұрын
It is a shame you don't make videos like these anymore. You are much more didactic than the tops G's on youtube on this topic.
just found your channel, its awesome! keep being yourself and hopefully you upload more soon. thanks!
@bennettbmadavana7176 Жыл бұрын
Thank you so much was stuck on this problem for days, finally clicked ✨
@MrDemianTV7 жыл бұрын
They say you can grab a person's attention in the first 15 seconds of the video. You nailed it.
@sajanchoudhary1085 жыл бұрын
Finally, someone has succeeded in explaining this question.
@pradeepravi75918 жыл бұрын
Dude ..thank you so much... I completed this problem ... :-p < Your Largest Rectangle submission got 50.00 points. >
@Virtualexist4 ай бұрын
This was 8 years ago? Bro was way ahead of his time!
@subham-raj4 жыл бұрын
*We can do this with only single stack too*
@gokukakarot63234 жыл бұрын
Fuuuuuucccckkkk, this is mindblowing explanation. Please make more videos like this. Also normally I watch videos at 1.5x this is the first video I watched at 0.75x
@aditya0707916 жыл бұрын
Loved the video ! Infinitely more interesting than other ones out there.
@EvanKozliner4 жыл бұрын
This question is wild. Awesome explanation :)
@kunalsinghgusain20707 жыл бұрын
great approach and great explaination i've seen so poor explainations. Yours is better than all others. i have a problem and i wish you could solve it in next videothat is "given a matrix of 0 an 1's how can you find maximum area rectangle?".
@justingivens2178 жыл бұрын
Awesome explanation of problem and solution! Keep them coming!!
@techdnb18 жыл бұрын
I like the explanations a lot, some ideas: - I watched a lot of Khan Academy videos, the style is similar but you don't see the person in the background, I find that more focused on the problem / less distracting. - I could use pauses at critical parts where I have to realize something. The pace is quite high overall for me to follow everything.
@Ubemochiya4 жыл бұрын
Really clear explanation with beautiful visuals (did you actually write in reverse???), I just find the bg music a bit distracting but other than that true awesome!
@ApurvJaiz4 жыл бұрын
I guess it would be a lot easier to just flip the video while editing.
@kristymayo4947 жыл бұрын
I'm super jealous of your markers. I need blood markers in my life.
@michaelcoppinger7868 жыл бұрын
Really great vid! Like how you keep the problems interesting and offer entertaining and clear explanations. Enjoy your work a lot :)
@tracyg21588 жыл бұрын
I absolutely loved this! Really wonderful job explaining the problem and working out a solution!!
@HardCapGamingOfficial7 жыл бұрын
I laughed so hard when he named the function popThatShit xD
@g00dvibes477 жыл бұрын
"...getting a little bit bored with the polite, PC...." subscribed.
@SHUBHAMRAGHUWANSHI_ASKN5 жыл бұрын
missed the case of equals(h === hstack[len-1]). nice video btw.
@bkkhokhani5 жыл бұрын
This case is covered in the code. Try this example with histogram height value [1, 2, 3, 2, 1]. The code will find the correct rectangle area which is 2 * 3 = 6.
@MaxHeckelIsMe8 жыл бұрын
Great video, going to binge watch the rest now.
@deepaligarg76432 жыл бұрын
Very nice. The code works. Thank you so much for making this video and explaining it so very well.
@KanagaveluSugumar4 жыл бұрын
Initially i confused that video is not synched with audio and got stuck! But overall it is good effort.
@RaviKumar-vk6ib4 жыл бұрын
It was awesome experience...didn't get bored for a sec...please keep up this swag!!!
@rockstar564104 жыл бұрын
this is such an amazing explanation
@bheshgurung69465 жыл бұрын
The implementation fails for [2, 1, 5, 6, 4, 4, 3]. It does not check if the next height is equal after encountering a smaller height. For the sample, it returns 10 instead of 16.
@Bdjdiwhbkdk8 жыл бұрын
I have a question. This is obviously a coding interview problem, so you need to code the thing. But what if using stacks isn't the "obvious" method, and just talking your way through and using stacks is confusing to the interviewer? You'd obviously want your interviewer to agree that your code works right then and there. You're not really gonna debug it and test if it works. So you might want to draw those stack diagrams and the histogram. But should you be doing this? When you're coding, is it okay to draw pictures to visualize your thought? And also, rather, SHOULD you be visualizing your thoughts during a coding interview?
@jackson-gabbard8 жыл бұрын
In the interviews I've done, candidates who could draw a coherent visual to help them make sense of the problem tended also to write better code and explain their code better. If you can draw a visual quickly that puts you and the interviewer on the same page, I think that's definitely to your advantage. However, it's a matter of timing. If you spend 10 minutes diagramming, you're probably taking too long. 2 or 3 minutes, tops. Then focus on the code. Also, you totally should be debugging and testing mentally once you finish the code. Good question.
@revantnayar34087 жыл бұрын
Jee B to
@asdfghjklqwertyuiop78998 жыл бұрын
love your style. pls keep making more.
@AlejandroNavarroD2 жыл бұрын
I had to solve this problem for a job that I applied and the company wanted I solve this problem in 15 o 30 minutes.
@sdddyr8 жыл бұрын
Awesome video, tried it in C# and works nice !
@insights152435 жыл бұрын
Regarding your brute force method, if I got you right then I think you're wrong: take the histogram [9,8]. Your brute force method will return 9 while the right answer is 16. You need to go both right and left (and not only right)
@knp2811928 жыл бұрын
1) I think you are missing to mention the time & space complexity. Is this the efficient solution ? Kind of like build towards the efficient one, from brute force. 2) Naming the position stack as starting position stack would have saved me some confusion :P
@sarscov98543 жыл бұрын
I was going to comment that you should use let instead of var, but then I realized this was made in 2016.
@samuellee21318 жыл бұрын
Is he like writing backwards
@vineethsai15755 жыл бұрын
Flip the video.
@Anonymous-ql7gn8 жыл бұрын
Simly Best tech video I ever seen.
@AndrewReisdorph8 жыл бұрын
Now that's a lot of shit popping
@TheJohn68668 жыл бұрын
Could you please explain the case when there is just 1 bar at position 0? I think the maxarea should be 1 but your code would return 0 since pos and tempPos would both be 0.
@reyou75 жыл бұрын
That's how I do interviews, walk in the room and say "hey, what's up motherfuckers?"
@giubueno7 жыл бұрын
Excellent video two thumbs up for it and one down for the code in Javascript because I think it would be more descriptive in Java.
@mrknight4117 жыл бұрын
I'm naming the pop method popThatShit(), the next time I'm asked to create a dumb Stack class during an interview.
@toomasvendelin2 жыл бұрын
A bonus question: is the author/presenter left-handed or right handed? Many thanks for a stellar example on how to make a KZbin video!
@lipache7 жыл бұрын
Thank you for your help and your vid is nice, but if you could name the stack as "Start Growing Positions" corresponding to the record in the "heights" stack, it would be easier to understand.
@sgtoverload_51676 жыл бұрын
awesome stuff man, keep up the good work i really like your thinking style..
@jacksainthill89748 жыл бұрын
+Jackson Gabbard 4:56 You seem to me to be ignoring a size 2x2=4 rectangle at this point.
@Nemtrac58 жыл бұрын
A square is always rectangle, a rectangle is not always a square. Semantics beyond that.
@jacksainthill89748 жыл бұрын
Nemtrac5 Am I presumed not to have known that?
@whywouldigivemyrealname51628 жыл бұрын
You literally point out the part at which he goes into the explanation of the 2x2...
@Nemtrac58 жыл бұрын
Jack Sainthill there was another guy saying it was a square not rectangle but they deleted their comment.
@jacksainthill89748 жыл бұрын
Nemtrac5 What a little coward! Cheers, you're right, I remember that now.
@satang5004 жыл бұрын
Hi Jackson, your two stack approach is much easier to compute area. When I first see this problem, I thought about stack and keep adding as long as me is larger than top of stack while content of stack is larger me, keep popping. But what I stuck was in your example, when index is 3 with values [1,3,2,1], I thought I have to compute all possible rectangles such that [1]=1, [2,1]=2, [3,2,1]=3, [1,3,2,1]=4, but no videos explain why I don't have to compute the rectangle between two indices [0, 3] and instead they just compute [1, 3] which means we always guarantee that area between indices [1, 3] always larger than indices [0, 3]. I don't understand how come area between [1, 3] always larger than [0, 3] ?
@ruffert1008 жыл бұрын
Great video performance! But from the algorithmic point of view I would suggested this (in pseudo code) maxArea = 0 for all l:listOfConnectedRectangles in listOfListOfConnectedRectangles do currentArea = width(l) * min(height of rectangles in l) maxArea = max( maxArea, currentArea ) end And ah well, yes, I would also need to specify how to derive listOfListOfConnectedRectangles. :) Anyway, this is a suggestion from the top of my hat, what do you think?
@skripnikalexander8 жыл бұрын
In your code the min(height of rectangles in l) will give an incorrect result, as the best area of listOfConnectedRectangles is not the lowestHeight(l)*width(l). E.g. in case of l = [1, 2, 4, 5], the currentArea should 4 * 2 = 8 instead of 1 * 4 = 4
@ruffert1008 жыл бұрын
Need to think about that. Thanks :)
@itizir8 жыл бұрын
Doesn't it depend on how Eduard defines 'listOfConnectedRectangles' and 'height of rectangles in l'? I think he rather meant something like (given your example input): "take the rectangle of width 4 (starting at 1); its height is 1 (the min value), so its area is 4; now take the next rectangle, of width 3; the min is now 2, so the size is 6; etc. etc." In this case it would be correct. The problem is it is very far from optimal: it is just the 'brute force' approach Jackson talks about at the beginning of the video (2:12). Since you potentially loop over all the columns for each and every column, it takes O(N^2), while the stack-based solution presented here is O(N)...
@TheJayRap7 жыл бұрын
wow this guy is so smart at cursing
@ravinder0901917 жыл бұрын
Colol explanation. Thanks. Please come up with a video on Dynamic Programming. Thanks.
@alirezaghey87635 жыл бұрын
Today we're going to code using a "for loop", which is an ancient form of loop, used way before there was a foreach for everything!!! HAHAH! Why doesn't he make anymore of these??
@ciphertester11476 жыл бұрын
Jackson Gabbard, I can't seem to follow how you got the starting position for the 3rd bar with height 2, for example if you took away the first bar and you just have an array of histogram heights of 3,2,1 how would you know that starting point of say height 2 or height 1. I think you need to hold these values. I would create a hash map which has height as the key and increment it each of the key by one if it qualifies/valid or pop it and compare it to the max value. A good test case to consider is 3,3,3,2,1,2,4,4,3,3,2,0,3,3,3,2,2,1,1,1,1,1
@jsocial258 жыл бұрын
Good algo but poor explanation
@reludragan8 жыл бұрын
I think hStack.push(h); pStack.push(tempPos); should happen only if popThatShit() was called, not necessarily if hStack.length === 0.
@Copainbig6 жыл бұрын
I need more of those videos! Fuck! This shit is fucking clear!
@keepallprivate76167 жыл бұрын
I wonder if it will going to be really a rectangle at the end of the day.. a square maybe?
@wax9118 жыл бұрын
Numerous popping of shit in our stacks, interesting theory had never thought of it that way!
@StockDC28 жыл бұрын
Hey, thanks for the video. I have a quick question if you don't mind. When you went from 3 to 2, you only popped the top value from the height stack (since the rectangle at index 2 started from index 1). However, when you go from 2 to 1, you pop from both stacks. Can you explain why? From my understanding, there is still a rectangle from index 1 to index 3 with height 1. So what I have in the Position and Height stack when i = 5 is: P - H 4 - 2 1 - 1 0 - 1 Thanks!
@sharinganuser15394 жыл бұрын
for a minute i forgot i'm studying....so many signature lines...even batman cried....i don't know much js...but i continued anyways......
@Lashovadjs7 жыл бұрын
Really some clever tricks, interesting.
@takanashiouken4 жыл бұрын
Is it only me? No matter how many time I read this still don’t get how does tempH*(pos-tempPos) get the area?
@vinknut4 жыл бұрын
At 6:06 there's a mistake. The largest rectangle isn't 3, it's 4.
@anolisporcatus5 жыл бұрын
your videos are the bomb.com man! keep it up
@kevincui16315 жыл бұрын
you don't need the weird sound effect. It messes things up
@tanmayrauthan57404 жыл бұрын
I liked and subscribed after that intro
@Milkyboy928 жыл бұрын
Cool video! As a general idea for avoiding popping that shit at the end, you could insert a 0 at the end of the histogram. Or is this too hacky?
@DiogoNeves8 жыл бұрын
That's interesting! I'd guess explicitly popping is more... explicit and clear. Can't wait for more opinions/logic on this :)
@reapertheunique8 жыл бұрын
This is a coding interview example? Holy shit! you would have to solve this while some dudes are watching your every move?
@Oreoboy1018 жыл бұрын
I had this in an interview today. FML. I bombed it.
@krozaine7 жыл бұрын
I was literally gonna close the video when you said Java, but you said Javascript the very right time. True Javascript developer _/\_ I donno if Javascript made it ugly or elegant :p
@bokonon888 жыл бұрын
after processing index 3, how is the 1x(4-1) rectangle of height 1 starting at position 1 ignored?
@TimZaman8 жыл бұрын
Very cool problem. Sadly, the implementation of the problem's solution is a bit too large for an interview question.
@programminginterviewprep18087 жыл бұрын
I am wondering how did you take this video? It looks very interesting!
@dubeya018 жыл бұрын
Very well articulated! Keep it up
@brifog697 жыл бұрын
How the fuck did he write those words at the start in reverse so well?
@4sky4 жыл бұрын
I think this is a good algo. But a hard interview question because I think the probability of coming up with this O(n) solution in the middle of an interview having never seen this problem is low.
@israelmcculley29273 жыл бұрын
If you use a Tuple you can just use 1 stack.
@creativeplanet28208 жыл бұрын
this is definitely not for beginners :3
@TheBluesons8 жыл бұрын
It's an interview problem, if you go to an interview as a beginner idk what you expect. It's still educational though, if you learn some algorithm stuff it'll be quite easy to take in
@randomshotz138 жыл бұрын
I'd be very interested in seeing a solution with non uniform class widths I imagine a similar approach but where the total width passed through would be stored rather than the starting location. If given the question from the video in an interview. Would the interviewer prefer I simplify the problem and assume unity or that I handled for other cases?