Тёмный

5 Problem Solving Tips for Cracking Coding Interview Questions 

CS Dojo
Подписаться 1,9 млн
Просмотров 1,3 млн
50% 1

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

 

29 сен 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 1 тыс.   
@CSDojo
@CSDojo 5 лет назад
Here’s my solution code to this problem in Python and Java: www.csdojo.io/problem Also, for improving your problem-solving skills, as I mentioned in the video, I recommend the following two pieces of resources: - 11 Essential Coding Interview Questions (my Udemy course): www.udemy.com/11-essential-coding-interview-questions/?couponCode=PROBLEM - Daily Coding Problem (a website that’s run by a friend of mine): www.csdojo.io/daily See you guys in the next video!
@13_cse_fredericimmanuel98
@13_cse_fredericimmanuel98 5 лет назад
Hey Cs dojo, your videos are very much different from other online tutors. I loved the python tutorials. I wish you'd make C programming tutorials too. Hoping to hear from you soon.
@flametrav2891
@flametrav2891 5 лет назад
witch software do you use for the presentation?
@cookeemonstahz
@cookeemonstahz 5 лет назад
What you can do is replace every element in array A with its conjugate. Then, for every element in array A, you do a binary search in a sorted array B, to find the closest possible number. This will allow you to reach an O(n*logn) solution with only O(1) space.
@Toopa88
@Toopa88 5 лет назад
18:07 check out projecteuler. It has 645 problems that can be solved and once you solve a problem you can see how others solved it. IT IS FREE!
@thesanto0520
@thesanto0520 5 лет назад
@@cookeemonstahz it's o(n) space just to store the array.
@bpc1570
@bpc1570 4 года назад
Just a thought. The question is that if the interviewer has not seen or practiced a given problem, will they still be able to solve and evaluate a candidate? The problem of these kinds of interviews is that the interviewer and candidates are not on equal ground. When the interviewer clearly knows the answer, it becomes somewhat biased when they attempt to judge their candidates (by asking things like, can you think of a better solution to this and so on, notice the keyword "think" not "recall"). I guess my point is that I don't quite believe the interviewer can always improvise a solution to problems such as finding the total number of subsets of integers that add up to a number or a cell automata problem with lots of recursions. I believe they can probably solve it by sitting quietly by themselves and tackling the problem without a time limit or without people watching them, but the question is that can they "think from the scratch" themselves? Do you code under pressure with people watching you and judging you? You don't see this kinds of interview in other industries such as EE, physics, chemical engineering, etc., because there's no way to ask you to design and implement a VLSI chip that functions a certain way or design a quantum mechanical system on the scene. But somehow in CS, this is convenient. Very often you interview for a machine learning position but people only, or to a large extent, focus on trickery coding problems; almost as if statistics and math are not as important; kind of going backwards, imho. Let's have an open research question, so that neither the interviewer nor the candidate has a viable solution at the moment. Then, we both try to solve the problem or come up with a tentative solution, in which case you'll also get to see how the candidate approaches the problem, their patience, their analytical capacities, personalities and so on. But at least, this interview process would be less biased. When people practice a lot of these coding problems and then go ahead to have an interview, they are really just "recalling from memory" on how to solve certain problems but you are not really testing their "analytical abilities."
@codingrat8323
@codingrat8323 4 года назад
This is so true. But, sadly a reality!
@scarface548
@scarface548 4 года назад
I like your idea about both interviewer and interviewee do that same problem. That would be awesome.
@vassilyn5378
@vassilyn5378 4 года назад
The bias you're [rightly] referring to is irrelevant. You're not competing against the interviewer, you're competing against other candidates. So you shouldn't care how biased your interviewer is to that particular problem 'cause he applies the same bias to all candidates (in theory). Therefore, it doesn't matter. What this does or doesn't test and/or how it correlates with candidate's qualities is another question. But the playground is equally fair (or unfair) for all candidates.
@scarface548
@scarface548 4 года назад
@@vassilyn5378 you are right it doesn't really matter how hard or easy the problem is if comparison is only against other candiates.
@allmighty2000
@allmighty2000 3 года назад
You guys are not newbies like me that’s why this things are coming on your head but Those who are sitting in at big companies as an interviewer are as good as ever could be , believe it , And you have to be that good to be a member of that big company
@SV90527
@SV90527 3 года назад
To everyone who understood this video, I'm happy for you. I'll get there soon. Update: I'm working as a Software Engineer in Toronto. Keep working hard, one day it'll pay off 👊🏼⚡️
@firstbay4024
@firstbay4024 3 года назад
i dont understand too
@michellemercy2715
@michellemercy2715 3 года назад
You got me but we are half way there okay! Haha stay curious!
@lokeshvijay5609
@lokeshvijay5609 3 года назад
I'll be there after you
@riceball100
@riceball100 3 года назад
Same will soon get there
@darkvador8477
@darkvador8477 3 года назад
Hopefully
@BipinOli90
@BipinOli90 5 лет назад
Just sort both arrays, from one array pick one element at time and using binary search, search for a other half of number in another array. You can write 2 binary search for this, one should return the exact number or the closest number higher than it and second one should return the exact or closest one smaller than it. Actually you only need to sort the one where binary search is being done. Overall complexity is O(nlgn). In the end what you came up with is very similar with this, and visualizing problems and solutions is a very important skill. Anyway, I wrote this, just to show that there are some other ways to think about such problems.
@andreastischler3447
@andreastischler3447 5 лет назад
Regarding your last solution: if there are two equal numbers in one of the arrays you start with then I think this approach could lead to a problem. In your grid-like visualization there would be a line (or row) where there are two equal numbers next to each other. Now say your target number is 17 and you hit a spot where there are two 16 next to each other you could ignore the second 16 that sits to the right of the one you are checking - so i think when you ignore the space next to the number you were checking you have to first check if the neighbouring numbers are really smaller or am I missing something here.
@adityashankarpal5934
@adityashankarpal5934 5 лет назад
For your second approach, you will require O(nlogn) . Suppose you have two arrays A and B with n elements and for each element in B you perform binary search O(logn) searching for the other number of pair in A. For n elements in B, the complexity would be O(nlogn)
@dizzydeveloper
@dizzydeveloper 3 года назад
Actullauy, i was looking comments to see if someone has mentioned this.e second approach will not take O(n) time, it will take more time.
@vedantsharma5876
@vedantsharma5876 3 года назад
But we can't use binary search since the two arrays are unsorted. So the second approach also would yield O(n^2) time complexity(Please correct me if wrong)
@rickvstange
@rickvstange 3 года назад
@@vedantsharma5876 You can first sort both arrays in O(nlogn), then do the binary seach for each element in B, which would be also O(nlog), since each binary seach takes O(logn). So, in the end, it should be O(nlogn). If the arrays were already sorted, doing the algorithm from the video would only take O(n), while binary seach for each element in B would still take O(nlogn).
@vedantsharma5876
@vedantsharma5876 3 года назад
@@rickvstange oh yes. Thanks Ricardo!
@Sycu
@Sycu 3 года назад
i would say its O(n*m) where m is the value of the target. You can think about corner case - where target is huge, like 1000000000, and all the numbers are small - 0, 1, 2 etc. You would have to iterate 1000000000 times to get the answer
@haroldwran775
@haroldwran775 5 лет назад
The most awesome explanation I have ever heard! Thank you, Dojo
@steve4195
@steve4195 3 года назад
I would actually argue that the second solution is better. You are saying the third solution is more efficient, however this requires the arrays to be sorted. In your Java solution, Arrays.sort is used. While that has average time complexity of O(n log(n)), it’s worst case complexity is O(n^2). That, paired with the case that the code for the second solution is far more readable, would have me lean to solution two. If you want to go with your third solution with unsorted arrays, adding to a TreeSet has a complexity of O(1) so it’s better to loop through the lists and make new tree sets, though iterating a tree set forwards and backwards makes the algorithm even more complicated.
@axelcarvalho2661
@axelcarvalho2661 5 лет назад
The set solution is O(n) and array sorting is already O(n*logn), so how is it better?
@maxintos1
@maxintos1 5 лет назад
The basic set solution only works on the simplified problem where we're looking for exactly the value. When we're solving the real problem the set solution is O(x*n) which might end up being way bigger than O(nLog(n)). For example with simple 1 element lists {500}{400} and target sum of 10, the set algorithm would take almost 900 cycles to calculate the answer.
@vleipnik
@vleipnik 4 года назад
@@maxintos1 Yes, you are correct .
@sanchousf
@sanchousf 4 года назад
No, it's not. Because complexity for the set solution is actually O(x*n*log(n)). Plus, filling of a set is O(n*log(n)).
@Mrwiseguy101690
@Mrwiseguy101690 4 года назад
@@sanchousf That's not true. Using a hash table backed set is O(1) insertion.
@Mrwiseguy101690
@Mrwiseguy101690 4 года назад
The time complexity is O(x*n), but x can be arbitrarily large. In the third solution, it really depends on the sorting algorithm used. If you use mergesort or heapsort, it'll definitely be O(nlogn) but space will also be O(n). If you use quicksort, worst case is O(n^2), but space is O(1). In my opinion, you can't objectively say which solution is better without having an idea of what x would tend to be. For small x, the second solution is better. For larger x, the third solution is better.
@JCho-pi5jz
@JCho-pi5jz 3 года назад
Thank you! The udemy videos are perfect. It's the only udemy course I actually used.... sadly, such ambition, yet no follow-through. I have a very important interview coming and I feel nervous bc I'm competing with people who were formally trained in CS. I just learned everything on the fly with no structure. I didn't even know there were algorithm types or what a binary search was. I would do them all the time bc I have a physics background so I understand optimation but I never learned the names. After seeing the different types of algorithms I feel like I'm starting with some sort of foundational idea of how to do it. I thought binary search meant you put a ) if it's not what you were looking for and a 1 if it was. lol
@aznthanh23
@aznthanh23 5 лет назад
Thank you for clear and concise explanation with visuals. Keep up the good work
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-o_guxLAoLYY.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@ivankontenski4396
@ivankontenski4396 2 года назад
Wait, at 4:08 this is still O of n squared, since you have to check each number from the first array for every number in the second array. And you can't search the first array in less then O(n), so that's still gonna be O(n^2)
@paulsalmon9313
@paulsalmon9313 2 года назад
I agree. I believe that with any solution on an unsorted array(s), you will still need to check every element. With them being of the same fixed size, that's n^2. This also caused me to pause and then I did a kind of deep dive on this problem. Even with the elements sorted, a brute force algorithm is n^2. Consider:: desired: 70 array1: [50, 51, 52, 53, 54] array2: [20, 21, 22, 23, 24] Where we start at the end, or consider a desired number of 78 or greater where we start from the beginning, brute force is o(n^2). So we would like better if possible. Other people have posted the same solution, but typing it out helps me :-) I do like to start with how sorting the data will help me. My thought was with the arrays sorted you can now iterate array1's elements(length 'n' times), then binary search array2 for a number that adds up to our desired number, storing off the closest sum as we go. The binary search on the sorted array2 reduces all array1 operations (n) on array2 to log(n). So we have nlogn. A bit irrelevant to time complexity but now that I think about it, only one array needs to be sorted.
@giovaniakabacon
@giovaniakabacon 4 года назад
Asking if a number exists in a set is not a O(1) function, it is ln(x) at least
@juanperusquia7456
@juanperusquia7456 5 лет назад
I came up with this solution: We have two arrays A, B 1) Sort array A, timeComplexity O(nlogn) 2) For each element in B we are going to search in the array A: Goal - Bi. But using BinarySearch LowerBound, why lower bound? Well if the number (Goal-Bi) exist in A the problem will be as he described using the set. If that number does not exist, the lower bound will give us the left number nearest to (Goal - Bi) also, we need to check the number infront of that index because the sum pair can get closer from the left or from the right. With this we are obtaining the two number that are closer to (Goal-Bi) from the left and from the right. If we want to have the pairs that are nearest the Goal. We can have in this process a variable that stores the minimum difference archived to get to the Goal Value, if we find a lower difference we forget the last pairs saved and store the new ones having that minimum difference. The process mentioned above will run in O(nlogn) because for each element in B we are using a binary search in A. Finally: TimeComplexity O(nlogn)
@djBC10000
@djBC10000 5 лет назад
Good luck coming up with these insights first time during a real interview rofl.
@zubich
@zubich 5 лет назад
just had this on my interview... of course I only came up with brute force solution. :)
@maxintos1
@maxintos1 5 лет назад
You don't really need those exact insights to solve the problem, it's just that visualization can help. He was basically brute force getting the insights. You could have just as easily found the answer by just thinking how if you sort the data you could eliminate a lot of checks, because if you know that array1[i] + array2[j] > target then there is no point checking the value of array1[i] + array2[j+1]. When you sort the data and look at it {1, 4, 7, 10} {4, 5, 7, 8} with target 13 you could notice that 10 + 4 is bigger than 13 so there is no point checking any other number with 10 so we move to 7. 7+4 is less so move forward. 7+5 less so keep going. 7+7 >13 so no point going forward. Move to 4 and etc until you need to move left or right, but there are no more elements. Then just return the answer you hopefully kept track of during the looping.
@johnsimon8457
@johnsimon8457 5 лет назад
If you were given two arrays of 1000 where O(n^2) is crap it MIGHT push you in the spatial solution direction but good luck implementing that on a whiteboard lol on hour three of an interview loop
@ChamplooMusashi
@ChamplooMusashi 4 года назад
Do some of the problems and get through a few interviews and you'll be able to find it. This problem really isn't so complex.
@LordLoldemort7
@LordLoldemort7 4 года назад
@@zubich did u get the job lol
@kaushikkandikonda2695
@kaushikkandikonda2695 4 года назад
If we are given 2 unsorted arrays. Then we must sort them, which takes O(n^2). So using any method described in the video, time complexity is O(n^2). So, Instead of using any other optimised method, we can use bruteforce method itself
@marcoangelo
@marcoangelo 5 лет назад
I was struggling to find something like this, thank you
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-o_guxLAoLYY.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html plz subscribe & comment on my video
@ShimonDanilov
@ShimonDanilov 3 года назад
Well, I don't agree that time complexity is n*logn, since sorting algorithms' complexity (and I believe you'll use in-place sort like quick sort) is n^2 in worst case. And you do this twice for two arrays (ok, 2*n^2 is still n^2, but it's not n*logn still). And at this moment we've only sorted arrays and we didn't start any search in the matrix. Searching in the matrix can be actually n^2 in worst case. So overall worst case is 4*n^2. And as for the space complexity, you'll definitely have n^2, as you have two arrays size of n.
@rishabmalhotra6980
@rishabmalhotra6980 2 года назад
As an interviewer the follow up would be: what if the numbers are repeating
@guccibane3422
@guccibane3422 5 лет назад
I’m prepping for a big interview at one of the big 4 companies (or 5 if counting Microsoft) Thank you for this video!
@MattZelda
@MattZelda 5 лет назад
How'd it go?
@jandrei32
@jandrei32 5 лет назад
Personally I would have sorted the array, check the halfway mark, if it was more than the target id get rid of everything above, then half again, until i reach a number equal to or less than the target. id do the same for the opposite.
@Roger-xb7gg
@Roger-xb7gg 5 лет назад
Leetcode hard combinatorics have traumatized me, saw this and immediately wanted to sort both arrays and use binary search to go through the other array and determine closest to target. O(nlogn) and so much more complicated to implement. Funny how sometimes the solution can be so simple and also the most efficient.
@chillaxdude5741
@chillaxdude5741 5 лет назад
We miss u here at Google!
@chillaxdude5741
@chillaxdude5741 5 лет назад
@@ankitsuthar3025 yes
@chillaxdude5741
@chillaxdude5741 5 лет назад
@@srt-fw8nh well, i wont say it is enough but its very important.. also try to work on your problem solving ability.😀
@brendapanda244
@brendapanda244 5 лет назад
How is the Google office people say its cool
@chillaxdude5741
@chillaxdude5741 5 лет назад
@@brendapanda244 it is amazingly cool..I love it.. at least u do not get bored!😀😀
@alexfaucheux6138
@alexfaucheux6138 5 лет назад
Do the coding interviews reflect what you will use in a job?
@himanshuchhikara4918
@himanshuchhikara4918 3 года назад
Best video i have ever seen .. pls continue making videos like this
@sergiusava9151
@sergiusava9151 4 года назад
Brute force solution be like: dispair, dispair, dispair. Very useful tips! Thank you!
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-k6gUDrSkRQE.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@hadimasri420
@hadimasri420 5 лет назад
I love you bro u changed my life
@martinmbae4356
@martinmbae4356 3 года назад
Great explanation. Companies like Turing give 30 mins to work on TWO such problems. Any tips on solving such with a tight time limit?
@qazyip
@qazyip 2 года назад
To all who need practice on this concept: Check problems on Leetcode. Question: Two sums will cover o(x * n) solution Question: Two sums ll will cover o(n log n)
@archmad
@archmad 3 года назад
not sure if i get #2 - create a set, yet the set is still a list which you need to compare it with individually which is still n^2, did i misunderstood a set?
@superoven
@superoven 3 года назад
A "set" in this case being like a python set. Checking if a specific number in it exists or not is just O(1) after you've made the set
@kmar5264
@kmar5264 3 года назад
The cost of looking up any value for a 'set' data structure is O(1) time. You would just ask the set if it contains a specific number(ex: set.contains(5) ), versus iterating through the values in the set.
@kishanpanchal5577
@kishanpanchal5577 5 лет назад
Hey, we can solve it O(nlogn) time complexity and O(1) space complexity.
@Laeyz
@Laeyz 5 лет назад
nope , because you need to save an array to sort it. so space will never be O(1).
@kishanpanchal5577
@kishanpanchal5577 5 лет назад
Ohk , I understand but in your method you need extra space other than given array. But if we use two pointer technique than doesn't need for extra space .
@CharanTejVicky
@CharanTejVicky 6 месяцев назад
Watching in 2024 such a good content ❤
@whereismymind6696
@whereismymind6696 5 лет назад
(Java) The solution I came up with was to populate a TreeSet with the first array and then do lookups on that set with set.floor(exactMatch) and set.ceiling(exactMatch). I think this would have a complexity of O(n) ?
@SYBIOTE
@SYBIOTE 5 лет назад
This feels like minesweeper Edit :now I'm majoring in cs
@sindhuindurthi6258
@sindhuindurthi6258 4 года назад
are we frnds ?
@curtis9701
@curtis9701 3 года назад
Any interviews that I have will be like: "So....do you want the brute force method?...or the brute force method?" This is great though, really gets you thinking how solve problems multiple ways.
@rafagamaxima
@rafagamaxima 4 года назад
And yet, sorting arrays also has complexity, which should be taken into account...
@nitinsingh2419
@nitinsingh2419 3 года назад
I think the time complexity 3 is more than 2 method. Isn't it?
@Technoph1le
@Technoph1le 2 года назад
Doesn't third and fourth approach look like a Binary Search Tree. But, except you will start from middle and compare the left and right
@qulmon32414
@qulmon32414 2 года назад
thats amazing, but how did u know the formula
@jaswanthwolfgame2487
@jaswanthwolfgame2487 3 года назад
Can u please give example to type fast
@dongchaohuang6558
@dongchaohuang6558 5 лет назад
Very clear explanation!
@brandish8215
@brandish8215 2 года назад
I don't understand something. Since you have to find ALL the pairs that are the closest to the target, wouldn't that mean you have to compute every pair possible anyway ? Shouldn't that make the complexities all the same since there is n² pairs and you have to check each one ?
@brad6678
@brad6678 5 лет назад
How is the last solution any better than the second one? it is definitely slower as soon as you have more than 7 items in your arrays. What is the acceptance criteria for this problem? how many pairs do you want to return?
@jawsize
@jawsize 4 года назад
what do you often do while at work like: think idea, solve problem or something?
@maxsolo2652
@maxsolo2652 4 года назад
4:05 O(2n) not O(n), because we have 2 arrays, and you defined n as length of array
@arthursuslov8386
@arthursuslov8386 4 года назад
O(2n) = O(n) = O(cn) where fixed c > 0.
@gale93
@gale93 5 лет назад
Amazing, it has been very fun to follow
@vaishnavi5070
@vaishnavi5070 4 года назад
so the solution is to make sets out of arrays and do BFS..
@simranray4564
@simranray4564 4 года назад
Besides everything related to coding and thinking, I really like the way that on clicking the dotted box bursts to display what's inside.
@othmanalyusifey356
@othmanalyusifey356 4 года назад
the same thing with me ~،،
@pl9397
@pl9397 4 года назад
any idea what tools/apps he is using to show the effects?
@GAURAVSHARMA-yg1ig
@GAURAVSHARMA-yg1ig 4 года назад
i hope the same thing happens to me when i start to code
@mormsophen3238
@mormsophen3238 4 года назад
Poo L idk. He might be the one who made that tool.
@iiparshii
@iiparshii 4 года назад
😂 😂 😂 😂 yea Simran.. lets just miss every imp. coding info. and lets focus on pop up boxes 😂..
@MonsieurCHING
@MonsieurCHING 5 лет назад
Tip #1: Come up with a brute-force solution - 1:23 Tip #2: Think of a simpler version of the problem - 2:34 Tip #3: Think with simpler examples -> try noticing a pattern - 5:54 Tip #4: Use some visualization - 10:10 Tip #5: Test your solution on a few examples - 15:09
@algoking
@algoking 5 лет назад
nice
@husa1n
@husa1n 5 лет назад
Underated hero, cheers mate
@neensta5404
@neensta5404 5 лет назад
kitna vella hai be ye
@modestpelicanprogramming6370
@modestpelicanprogramming6370 4 года назад
@@neensta5404 Not gonna lie that was kinda aggressive...
@Venketu
@Venketu 4 года назад
Doing God's work
@neutral1802
@neutral1802 5 лет назад
The moment your best solution is the brute-force one. 1:32 This pair, Dis pair, Despair.
@fevgatoz
@fevgatoz 4 года назад
i cried laughing broh
@maksimbeliaev5339
@maksimbeliaev5339 4 года назад
Yes, the guy is just noob In first example he has shown a list with negative numbers, so his last method will not work He will just fail an interview
@hassanakhtar7874
@hassanakhtar7874 4 года назад
@@maksimbeliaev5339 u suck
@ほっしゃん-b8b
@ほっしゃん-b8b 4 года назад
Maksim Beliaev you know that he's an ex-google software engineer right?
@alejandroestrella69
@alejandroestrella69 4 года назад
And that means what exactly?
@asishbalu2415
@asishbalu2415 4 года назад
Here's a solution that is also O(nlogn), but faster than the one you provided: Sort array 1 (nlogn). Now, for each value x of array 2, conduct binary search on array 1 to find the element closest to (target -x). This should be nlogn as well. Your solution requires 2 sorts and extra processing, but this one only requires one sort.
@mohamedkandeel6553
@mohamedkandeel6553 4 года назад
That's the same solution that jumped into my mind once I read the problem.
@rpesel
@rpesel 3 года назад
Exactly my solution
@OmarChida
@OmarChida 3 года назад
I have solved a problem very darn similar to this earlier today and this was the solution I came up with too
@konm
@konm 2 года назад
Closest doesn't mean that the sum of the elements will be close to the target. You are right. Nice approach.
@YongfangZhang
@YongfangZhang 2 года назад
Nice try.
@nutsilog
@nutsilog 4 года назад
This just made me realize how stupid I am 😂😂
@rsmlifestyle3436
@rsmlifestyle3436 4 года назад
Hey, your not stupid. These are things that are new to you. Your more than capable of learning this. Just break it down, bit by bit. Be able to teach yourself in way that makes sense to you.
@ahmedkarem2718
@ahmedkarem2718 4 года назад
Yes you are (if you compare yourself with someone that have more practice and experience but if you practice, this will be easy for you good luck.)
@CarlosFernandez-js8yn
@CarlosFernandez-js8yn 4 года назад
xxGodx ur harsh...be more positive
@PraveenKumar-id4pg
@PraveenKumar-id4pg 4 года назад
@@rsmlifestyle3436 thanks bro
@davidkuda7074
@davidkuda7074 3 года назад
@@rsmlifestyle3436 wow, that's one of the most positive things that I've read online. Thanks for spreading this positivity! Invaluable!
@user-hh2is9kg9j
@user-hh2is9kg9j 3 года назад
I could do that if I have 3 hours and preferably without someone in a suit staring at me while I am doing it.
@maks0bs
@maks0bs 5 лет назад
That's actually a very good idea, I haven't thought about, great video)). But why not use binary search in this problem? The complexity would also be O(n log n). You parse through the unsorted array and start binary search on the sorted one to find the closest sum. Roughly speaking, the complexity would be 2 * n * log n, since you only sort one array and use binary search with the other one for n log n. The concept of binary search can be used in a variety of other problems, but I'm not really sure if this can be applicable somewhere else. The idea in the video looks like semi-dynamicProgramming.
@toantruong9533
@toantruong9533 5 лет назад
I also come up with this solution.
@TheLuke1662
@TheLuke1662 5 лет назад
Same! Here is my solution in C++ void closestPair(std::vector& a, std::vector& b, int target) { std::sort(b.begin(), b.end()); int a_index = 0, b_index = 0; int current = a[0] + b[0]; int current_target; for (int i = 0; i < a.size(); i++) { current_target = target - a[i]; auto lower = std::lower_bound(b.begin(), b.end(), current_target) - b.begin(); int temp = b[lower]; if (lower != 0){ if (std::abs(b[lower] - current_target) > std::abs(current_target - b[lower - 1])) { temp = b[lower-1]; lower--; } } if (std::abs(current - target) > std::abs(temp - current_target)) { current = temp + a[i]; a_index = i; b_index = lower; } } std::cout
@rafagamaxima
@rafagamaxima 4 года назад
And what about the complexity of sorting the array?
@ПетяТабуреткин-в7т
That's what I came up with as well. But it will probably be slower, because performing the second `O(n log(n))` operation will eventually be slower than a `O(n)`. But it's still `O(n log(n))`, so maybe it's not that bad.
@MishaAmashukeli
@MishaAmashukeli 4 года назад
Yeah it will work, but it will be a bit more code, and slower.
@StRanGerManY
@StRanGerManY 4 года назад
Tip#2 It won't be O(n), since for each number in first array, we calculate the reminder and look at each number in the second array. Thus, it is same O(n^2) as the brute force solution. Actually, its quite a bit worse, since we actually have x * O(n^2) As for the final solution, vizualization is nice and all, but it is actually quite a bit easy to solve this without it. Just sort both arrays, one from small to big, and the other array - the other way around. Start from 0 on both of the sum, if sum is bigger then searched number, get next value on the second array. Otherwise, get value from the first array. Remember the sum at each step, and print the closest pair. Boom, problem solved. O(n*log(n))
@vickyanand5898
@vickyanand5898 3 года назад
No it will be nlogn since its searching in a set .
@ALLCAPS
@ALLCAPS 2 года назад
You're correct. Tip #2 when he said it would be O(n), I immediately thought: ..............what?
@tijikthomas
@tijikthomas Год назад
Searching in a set takes O(1) time
@joaovfeijo
@joaovfeijo 5 лет назад
High quality as always, man. Thank you for your good work. I learn a lot with your videos.
@will2see
@will2see 4 года назад
3:57 - "This solution O(n)" - Are you sure about that???
@wahahahawaha
@wahahahawaha 4 года назад
I have the same doubt (while I am in an interview)..... The number in set is O(n) , I feel it should still be O(n^2), θ(n) maybe? since the number in set is θ(1)
@manalibiswas6482
@manalibiswas6482 4 года назад
If u hash the numbers of first array, then it will be o(n). If u put it in a set, have to use something like lower_bound() instead and additional checks,.. hashing would ensure o(n).
@keunwooOOO
@keunwooOOO 4 года назад
Finding an element in a set is O(log n) so the overall complexity should be O(n log n).
@Hack_Neuron_To_DSA
@Hack_Neuron_To_DSA 4 года назад
Wrong explaination its nlogn
@lazandrei_19
@lazandrei_19 4 года назад
According to stack overflow, ad, remove and contains on a hashset can be done in O(1). So it's O(n) to add them, O(n) to search the other array => O(2n) = O(n)
@allfreetechhub
@allfreetechhub 4 года назад
Another way: Sort the first array (a1) in ASC order, while sort the other one (a2) in DESC order. start with i1 = 0, i2 = 0 (i1 as index of first array, i2 as index of 2nd array) Check a1[i1] + a2[i2], if it's less than given number, then "i1++"(to pick a larger number), and if it's greater than the given number, then "i2++"(to pick a smaller number). You will get the answer with following complexity: Sorting: O(n*logn), twice Iteration: O(n), twice (worst case)
@bird6472
@bird6472 2 года назад
This is the way I did it. Sort both arrays then it becomes a simple 2 pointer pattern problem.
@cachorito01
@cachorito01 5 лет назад
These tips are amazing!! The final solution amazed me, I just recently failed an interview for an intership at one of the big 4 and im determined to study at least 2 hours a day for my next one, I hope you make more videos like these!
@RamizZamanJEEPhysics
@RamizZamanJEEPhysics 5 лет назад
Where did you apply mate ?
@cachorito01
@cachorito01 5 лет назад
@@RamizZamanJEEPhysics I went to a hackathon and left my resume, but you can apply online too, just search the name of the company and careers
@RamizZamanJEEPhysics
@RamizZamanJEEPhysics 5 лет назад
Thanks mate
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-o_guxLAoLYY.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@scottwright7177
@scottwright7177 3 года назад
Maybe I'm wrong, but there wasn't any consideration for the complexity added for sorting in #3 or hash table lookup in #2. In this case, the change to the solution's complexity is negligible, but you can't forget to consider those steps.
@haibai1766
@haibai1766 3 года назад
My Tip #2: Find the inefficiencies in the brute force solution and see if you can optimize them. In this case it's the checking of the second array for each element in the first array, which can be optimized by sorting the second array and using binary search (I haven't watched the entire vid yet so I don't know if that's the intended solution or complexity). Edit: Huh so two pointers may lead to an O(N) solution (after sorting)! Two pointers and binary search seem very related!
@depression_plusplus6120
@depression_plusplus6120 Год назад
So funny isn't it. Right 2 years from now. I left a comment here from some of my other accounts saying DP is so hard and maybe coding isn't for me😢. Now when I'm back here. 2years of wholesome practice and grinds on CF CC LC, I'm just getting each and every word he's saying like ABCD...Heck, I'm even getting better ideas than what he's conveying here. If you're demotivated. Just don't. Keep practicing. I, personally, am not very bright, academically. I take hours, days to digest easy basic concepts and that's alright. As long as you get it at the end, it's a win win for you. Keep grinding. Keep hustling. Don't cry. Don't despair. We ain't the same. Some take minutes to understand segment trees, while people like myself took whole month to even get the idea of its working and the logic behind its creation and its usage in problems. Just keep hustling. I know you'll get there BTW, did I tell you, I ain't a CS major. I'm studying Physics. Which I hate with all my passion. Maybe you might consider reading the only comment, which is mine btw, on this video. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-6MPP_MqS0WA.html
@stunseed8385
@stunseed8385 5 лет назад
I think you can also achieve a nlogn by sorting, and do a modified binary search for the exact or the closest value.
@franciscov511
@franciscov511 3 года назад
yes, oh maybe you can sort the two arrays, mix them and perform binary search
@4fecta353
@4fecta353 5 лет назад
You could have solved the problem with the second method in O(nlogn) time if you used a BBST, and binary search for floor and ceiling values. Since we don't actually need the index of the values, we can use a TreeSet in Java (red-black tree) to implement this idea without it being too bulky. This saves from all the ArrayList sorting shenanigans.
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-k6gUDrSkRQE.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@hil449
@hil449 2 года назад
that uses extra space tho, but with 2 pointers you can solve it with constant space
@FinancialBasicsGuide
@FinancialBasicsGuide Год назад
You made it complicated. A simple solution is just sort the array and use 2 points one for 1st and one for 2nd and find the sum and store the difference and number. Now increment the pointer which have small value. Repeat the process if the current diff is less our diff update the diff and result numbers. That's it. No need to do extra calculations.
@tharindueranga6407
@tharindueranga6407 3 года назад
Your tip 2 is also requires to iterate through a Set. Doesn't that make it the same complexity as tip 1?
@akanbiayomide8214
@akanbiayomide8214 2 года назад
No with tip 2 he only iterates through the list. So he takes the first element of the list and sees what sum makes 24. Let’s call that number x. So x+ first element= 24. U can use set properties to search if x exists in the set. And if it does u have found the answer. Which is O(n) Bc u iterate through each element to see if there is a x that makes this true. . Hope this makes sense.
@rui3692
@rui3692 5 лет назад
it’s useful when you practice solving algorithm questions, but I doubt how much time you have to go though this kind of thinking process in actual interviews, especially considering that interviewers usually have prepared two questions to ask. So practice is still the key. Don’t ever try to rely on the introduced techs to hack an interview
@maria-wu7us
@maria-wu7us 3 года назад
This is not true for interviews I have conducted. I would rather get a candidate who thinks through a problem and reaches even a brute force solution to something they have never seen before. Sometimes you can tell that a person has practiced the question and simply memorized a solution. Gaps will start to show when you ask questions on basic concepts on their target language that are not related to solving problems. Practice is important but most professionals don't have the time to sit and run thorough programming problems in their free time. But you will have amassed many skills just from working full time and will feel more conformable showing up to interviews without doing the overnight cram sessions I used to do in college. And yes, there will be times when you can't answer the question. I have been there multiple times (in fact, with problems similar to the one in the video). And that's okay, that just means you're not a right fit for the job. I also don't want to reach a position in which I realize later on that I don't have the technical knowledge to contribute well. It doesn't feel good.
@wecancode1283
@wecancode1283 3 года назад
More than 90% of newcomers to programming learn from tutorials on youtube or other similar platforms like Coursera... However, most of us when finally feeling confident about our skills in whatever programming languages when choose to learn and try to start our own project, we get these overwhelming ideas, functions, functionalities, and components that we're positive we're gonna need in our project but somehow we lack the skill of gathering all of that and putting it together for a final product. We DON'T EVEN KNOW WHERE TO START though we feel like we understand everything. I took some time and put some effort into researching this and I figured it out!! WE LEARNED IT THE WRONG WAY!!! I've talked about it briefly in my first video in a long tutorial series here on youtube: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-oVd3NivzZx8.html
@bris.e
@bris.e 5 лет назад
This amazing video steps got me a new amazing job. You are great! Thank you for the awesome content you are generating!
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-o_guxLAoLYY.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@carlosrodriguez8503
@carlosrodriguez8503 3 года назад
Just off the top of my head (and I didn't actually implement this solution, so it may not work). Sort both of the arrays, and have a pointer point to the first element of the first array, and another pointer point to the last element of the second array. Grab the sum of the two elements holding the pointer, if the sum is too low move the pointer on the first array to the next element, if the sum is too high, then move the pointer on the second array to the previous element. Continue this procedure until the pointers criss-cross, i.e. while(secondP > firstP), MEANWHILE keep track of the lowest difference so far between the sums and the target, and their indexes.
@weareworkingonit
@weareworkingonit 5 лет назад
Don't skip math and algebra in school kids.
@danieleccleston7928
@danieleccleston7928 5 лет назад
Now he tells me....
@tb0nestk
@tb0nestk 5 лет назад
YK, Thinking out loud. In an interview setting, it would be intimidating to approach a problem, thinking out loud. It takes experience and practice to master the technique. Your explanation is so valuable, learning how to think and what questions to ask. Here’s an idea. Take leetcode site, there are over 700 problems, you solve one problem a day, show how you’d approach the problem, how to think, what questions to ask, how to optimize... I think that’s so valuable. Who knows by the end of the year, you can just gather up all those videos and create another Udemy class, I think lots of people would appreciate that
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-k6gUDrSkRQE.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@photographymaniac2529
@photographymaniac2529 4 года назад
It's really idiotic idea to do like that
@Seawolf159
@Seawolf159 5 лет назад
Great buildup from vague idea of how to do it, to coming up with a way to traverse that grid. Really cool.
@achanoch
@achanoch 5 лет назад
You are brilliant. Thanks for the knowledge sharing and innovating problem solving skills
@ImTheBoss914
@ImTheBoss914 3 года назад
What exactly is the set? Is that a hash table? Does that mean it’s constant time lookup? I’m just confusion on how the runtime is linear for the 2nd version of how to solve the first problem.
@talibuddeenabdulhakeem
@talibuddeenabdulhakeem 3 года назад
The reason for putting the data in a set is because a set is build on a hash table, than you can accessed data via a hash table. The look up on a hash table is quicker than looking up on a array. For an array you have to iterate over the list while a hash table will be able to find the item you are looking for right away if it exist. In python at least this is how set are built. you will still need to iterate over one of the arrays so I think that makes the solution is linear I believe.
@alexander_andrush
@alexander_andrush 5 лет назад
Nice idea, but I think in this case the visualization makes the problem a bit more complex than it is. I came up with simple short solution (C++) with runtime complexity O(n log(n)) and space complexity O(n). In my solution arrays can have different sizes. pair sumUpToTarget( vector &v1, vector &v2, int target) { if ((v1.size() < 1) || (v2.size() < 1)) return {}; set s(v2.begin(), v2.end()); pair p = { {*v1.begin(), *s.begin()}, std::abs(target - (*v1.begin() + *s.begin())) }; for (auto elm : v1) { auto pos = s.lower_bound(target - elm); if (pos == s.end()) pos = prev(s.end()); if (abs(target - (elm + *pos)) < p.second) p = { {elm, *pos}, abs(target - (elm + *pos)) }; } return p.first; }
@sarkarasm285
@sarkarasm285 4 года назад
Can't we sort only one of the arrays and then perform binary search on the array for each element of the other array. Time complexity still remains o(nlogn).
@anouar-fadili
@anouar-fadili 4 года назад
greedy thinking! it's my solution too.
@meryamle6270
@meryamle6270 5 лет назад
I'm not even into coding but I just like you 😘
@bengalurudiaries1523
@bengalurudiaries1523 5 лет назад
I ask the interviewer should Iook for a better solution? Time complexity required to find a solution that pleases the interviewer is O(n²)
@DiasDenny
@DiasDenny 4 года назад
😂😂
@AndreyZhidenkov
@AndreyZhidenkov 5 лет назад
The process of sorting arrays requires time ans space as well.
@herzfeld2
@herzfeld2 5 лет назад
he states at the end the time complexity is O(nlogn) and space complexity O(n) "assuming that you use an nlogn sorting algorithm" i.e. mergesort or quicksort or te like. mergesort is of time complex O(nlogn) and space O(n) thus we can assume he is accounting for this correctly.
@himanshusankhala8633
@himanshusankhala8633 4 года назад
Code in python bro
@PlaneToTheBrainES
@PlaneToTheBrainES 5 лет назад
I have a question for the code attached to the video: why is it 'j = len(a2_sorted) - 1' instead of 'j = len(a2_sorted)' in the nineth line?
@amirabbas434
@amirabbas434 5 лет назад
Hi... Good video. Like always
@naserdakhel5051
@naserdakhel5051 5 лет назад
I really really enjoy your videos, problem solving the most, i hope your channel covers more about problem solving and competitive programming
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-o_guxLAoLYY.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@meph5291
@meph5291 4 года назад
This can be done in O(n) time. Go over first list, create a new list with required numbers to reach target, go over second list and compute Math.abs() to determine how close you are to target. If you are closer than previous one, mark this tuple in a list. After iterration of second list you know exactly how close you can get with how many tuples. No need to sort, if you sort you get in to n*logn order. Only problem in this solution is you need O(n) memory.
@firstbay4024
@firstbay4024 3 года назад
he didnt explain very well...
@firstbay4024
@firstbay4024 3 года назад
yours is better
@LuongPham-jq2px
@LuongPham-jq2px 5 лет назад
What is the tool you used for creating this video YK? I think it is amazing for teaching by this way.
@smirkedShoe
@smirkedShoe 5 лет назад
Yes. It's good. Looking for the same
@philcooper2408
@philcooper2408 5 лет назад
He's a coder, maybe he wrote it himself
@gracewood6768
@gracewood6768 5 лет назад
@@philcooper2408 :o woa
@jaredbaum
@jaredbaum 4 года назад
My solution to this would be to sort just 1 of the arrays. Then for each node of the 2nd array do a binary search into the first array of the 'compliment' (aka the number that would directly equal the target). This should get the closest to that. From there you just keep track of the minimum absolute value of the different from the target. This is also an O(nlgn) solution.
@dellebabu5705
@dellebabu5705 4 года назад
5:30 think every language dont have function to check particular element is there in the list or not . In c it is not there so u have to compare against each element. its o(n2) . 8:45 if sort first then u have to consider the sort complexity o(n2) or log n
@artur8129
@artur8129 4 года назад
right, he is not a programmer at all, checking in the set also takes n actions but he talks about it as if it was nothing. He said other silly things, too. If I am wrong, explain to me, I'll accept it.
@hestiaverof
@hestiaverof 4 года назад
ArtCool Live it’s because the set is a hash table, so lookups are constant O(1).
@artur8129
@artur8129 4 года назад
If it's hash table, you still have to go over every item which makes it O(n)
@Ready2eddie
@Ready2eddie 5 лет назад
Love watching these even if this isnt my major.
@PerfectorZY
@PerfectorZY 5 лет назад
Eddie Cho come to the computer science side, let the algorithms flow through you
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-k6gUDrSkRQE.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@jesse578
@jesse578 4 года назад
The problem usually for me is not coming up with the solution, but actually coding the solution after coming up with it, because I suck at coding.
@b735player
@b735player 4 года назад
Another great way to solve this problem: 1. Sort 1 of the arrays O(n*log(n)) 2. Make that sorted array into a balanced binary tree (this is O(n) complex) 3. for each elem in the other array: DFS search binary tree for closest pair 4. DFS method is defined as follows if bTree.root + elem is closer to the target than the current best pair then (bTree.root, elem) becomes the best pair if bTree.root + elem < target && bTree.right.nonEmpty then DFS(right) else if bTree.root + elem > target && bTree.left.nonEmpty then DFS(left) The DFS lookup for the closest pair for a single element takes O(log(n)) time. Repeating for each element in the second array gives us O(n*log(n)) time
@ImaskarDono
@ImaskarDono 4 года назад
Exactly. This is much better, because if arrays have different length, you can only sort the small one. And even if they are the same, real world complexity is better.
@thrishmareddy
@thrishmareddy 5 лет назад
Learnt so so much in this video alone. Thanks a lot for this high-quality content ❤
@nomadicfathersons
@nomadicfathersons 3 года назад
If you like Html & css webdesigning ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-k6gUDrSkRQE.html ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PqrZrvaObZk.html Support & comment on my video
@hertzvador2220
@hertzvador2220 3 года назад
Good sales pitch. A simple solution: You could associate each value to each bit of an integer (12 bits, 6 MSB is first array, 6 LSB is second array) in total going from 0 to 2^12=4096. Add all the values associated with a 1. This would go through all the combinations at light speed.
@Toopa88
@Toopa88 5 лет назад
18:07 check out projecteuler. It has 645 problems that can be solved and once you solve a problem you can see how others solved it. IT IS FREE!
@gracewood6768
@gracewood6768 5 лет назад
Id definitely try it :) i lvoe to increase my problem solving as well ;)
@raidrelm
@raidrelm 5 лет назад
Here is the solution I came up with with pyhton: def sum(x,number): start = 0 end = len(x) - 1 base = x[start] + x[end] while start < end and end > start: if base == number: print (str(x[start]) + " and " + str(x[end]) + " adds up to " + str(number) ) return True elif base > number: end -= 1 base = x[start] + x[end] elif base < number: start += 1 base = x[start] + x[end] else: print ("No pair in these set of numbers add up to "+ str(number) ) return False
@WhiteGhost13
@WhiteGhost13 5 лет назад
This was on my algorithms exam last semester 😱😱 and we had to prove that ours was most optimal
@konstantinavdeev6460
@konstantinavdeev6460 3 года назад
A very nice explanation of the thinking process. But another trait of a good programmer is knowing his data structures. Java, for example, has TreeSet with an O(logn) time complexity for ceiling/floor methods. And that would come straight from your "simpler version of the problem". So, for those of us not so bright as to come up with the original solution, it's worth to learn the proper tools our languages provide.
@anibalasubramaniam4153
@anibalasubramaniam4153 5 лет назад
You just wrote a DDA 👍👏
@sriharshacv7760
@sriharshacv7760 3 года назад
what is a dda
@uzdik.student
@uzdik.student 6 месяцев назад
0:20 What is the name of that presentation tool?
@Penguinz-fr1mu
@Penguinz-fr1mu 5 лет назад
I would just buy another CPU
@codeonmars579
@codeonmars579 5 лет назад
You can subscribe to this channel to stay updated with latest programming videos ru-vid.com/show-UC33VKuS1b-JmGh-Zi-oWOyA
Далее
Problem-Solving for Developers - A Beginner's Guide
10:44
ОБЗОР НА ШТАНЫ от БЕЗДNA
00:59
Просмотров 263 тыс.
Дикий Бармалей разозлил всех!
01:00
ТАРАКАН
00:38
Просмотров 753 тыс.
Top 7 Algorithms for Coding Interviews Explained SIMPLY
21:22
ОБЗОР НА ШТАНЫ от БЕЗДNA
00:59
Просмотров 263 тыс.