Maximum Profit in Job Scheduling - Leetcode 1235 - Python

Sdílet
Vložit
  • čas přidán 23. 07. 2024
  • 🚀 neetcode.io/ - A better way to prepare for Coding Interviews
    🧑‍💼 LinkedIn: / navdeep-singh-3aaa14161
    🥷 Discord: / discord
    🐦 Twitter: / neetcode1
    🐮 Support the channel: / neetcode
    ⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
    💡 DYNAMIC PROGRAMMING PLAYLIST: • House Robber - Leetco...
    Problem Link: leetcode.com/problems/maximum...
    0:00 - Read the problem
    0:57 - Drawing Explanation
    7:57 - Coding Explanation
    leetcode 1235
    #neetcode #leetcode #python

Komentáře • 55

  • @MP-ny3ep
    @MP-ny3ep Před 6 měsíci +6

    Great explanation as always. Thank you for going through different methods in the beginning of the video and explaining why you would or wouldn't consider them. That really helps a lot and that's what sets you apart from other youtubers !

  • @corvo8754
    @corvo8754 Před 6 měsíci +1

    Thank you for this video, I've recently started doing Leetcode dailies and through your videos I really understood the problems :)

  • @VenomUnstable
    @VenomUnstable Před 6 měsíci +13

    Neetcode please keep uploading videos this helps alot thank you so much❤

  • @user-zn4fi1vk6z
    @user-zn4fi1vk6z Před 6 měsíci +2

    Excellent work! Thank you for your explaination!

  • @KnightMirkoYo
    @KnightMirkoYo Před 6 měsíci +2

    Thank you Navdeep so much for these daily videos.

  • @randomforest_dev
    @randomforest_dev Před 6 měsíci +1

    Thanks for the video. It would be great if you can also show step by step progress by printing out values because for beginners, it is easier to understand.

  • @KhyatiSatija
    @KhyatiSatija Před 6 měsíci +1

    thank you so much ! may god always bless you with happiness n prosperity. you hv taught me a lot, thaanksss from the bottom ofmy heart. please never stop making these videos of the daily challenges.

  • @ashwinvarma9349
    @ashwinvarma9349 Před 5 měsíci

    awesome explanation man!

  • @user-lk1ps6on7y
    @user-lk1ps6on7y Před 6 měsíci

    pls help
    for take condition cant we just do profit[i] + helper(endTime[i]) cuz we cant start a new process until the current one is finished?

  • @kathirchidhambarapandy929
    @kathirchidhambarapandy929 Před 6 měsíci

    Great explanation

  • @ignazioperez4725
    @ignazioperez4725 Před 6 měsíci +3

    Hey neetcode, I want to say thank you. Currently I’m in the final round for both Meta and Amazon for swe internships and your videos and website have been so helpful! I’ve been watching you for the last year and your ability to explain complicated concepts in a simple way has made me much more confident in my computer science abilities, thank you!

  • @siddharthaddagudi7255
    @siddharthaddagudi7255 Před 6 měsíci +1

    You are my glorious king NeetCode I love you

  • @rostislav_vat
    @rostislav_vat Před 18 dny

    Thanks for this video

  • @satyamjha68
    @satyamjha68 Před 6 měsíci +2

    Ok neetcode , love your videos . By the way is it necessary to write the tabulation solution also in interview. We can obviously convert this solution into tabulation but the thing is that recursive solution is intutive but tabulation solution is not. So what i generally do is write recursive solution and then memoize it and then tabulate it

  • @KhyatiSatija
    @KhyatiSatija Před 6 měsíci

    Best explanation EVER in this entire history of DP

  • @aryansingh-by9nq
    @aryansingh-by9nq Před 6 měsíci +1

    Why you have used -1, -1 in the binary search tuple, how is that working, can you please explain.

  • @mikerico6175
    @mikerico6175 Před 6 měsíci

    @neetcode Why do you so cache dict instead of @cache ?

  • @saipriyakarnati2275
    @saipriyakarnati2275 Před 6 měsíci

    Please upload videos of leetcode contests too

  • @BurhanAijaz
    @BurhanAijaz Před 6 měsíci +4

    I coudnt understand this one , can you please tell me all the prerequisites for this one

    • @ShyGuy_16
      @ShyGuy_16 Před 6 měsíci

      i too need the prerequisites, can somebody help?

    • @Kan-JenLiu
      @Kan-JenLiu Před 6 měsíci

      @@ShyGuy_16 backtracking

  • @XboxHero2
    @XboxHero2 Před 6 měsíci

    I actually struggled to understand your solution, but then I remembered that the task is to only find the output max value, not the path itself 😂 And then it all clicked, thanks as always. You are up there among the greats such as Abdul Bari ❤

  • @verma_jay
    @verma_jay Před 6 měsíci

    your explanation is too good

    • @tasneemayham974
      @tasneemayham974 Před 6 měsíci

      Yes, he's the best! Although I code in java, his explanation is so clear that I understand the code in python and can recode it by myself in java!! Amazing!

  • @prajjwaldubey5787
    @prajjwaldubey5787 Před 6 měsíci +1

    why we can't sort it on the basis of end time, because if we sort with endtime then the minimum endtime will be in ascending order will that not work ????

  • @shashwatkumar3079
    @shashwatkumar3079 Před 6 měsíci

    Great video as always sir. I have learned a lot from your videos and these videos have always motivated me to go for solving problems cause I know there is someone for my help. For this video I have a question that is there a way to solve this problem by sorting the endTime values and if not then why ? I am asking this question because often time I have this confusion that whether I should sort by ending times or starting times. Again thanks a lot for your explainations.

  • @sourvad
    @sourvad Před 6 měsíci +1

    In NeetCode's video, he used: j = bisect.bisect(intervals, (intervals[i][1], -1, -1)) to efficiently get the next index. My questions is this:
    Python's documentation says that the returned index is > than all indices to its left. That would mean that the start time of j would be > end time of i. But in the problem definition, >= is allowed. What am I missing here?

    • @tasneemayham974
      @tasneemayham974 Před 6 měsíci

      May you please link the documentation where you read this from?

    • @user-nj8lu8ld9e
      @user-nj8lu8ld9e Před 5 měsíci

      and is it because for [(1, 3, 50), (2, 4, 10), (3, 5, 40), (3, 6, 70)], we are inserting (3, -1, -1), which corresponds to the end time for (1, 3, 50) between (3, 5, 40) and (3, 6, 70) because 40 < 50 < 70?

    • @GurnurW
      @GurnurW Před měsícem +1

      According to this video logic, he is comparing one complete tuple (e.g.: end, -1, -1) with the current tuple. Since -1 is smaller than any valid profit or end time, the tuple (end, -1, -1) will fit into the correct position considering the list is sorted by start times. So, it would give the next index whose start time is >= end time of current. If you just want to compare the start times out of the tuple, you can use bisect_left as bisect.bisect_left(intervals, intervals[i][1], key= lambda x: x[0])

  • @loltubemsic
    @loltubemsic Před 6 měsíci

    What would the binary search code look like if we implemented it ourselves?

    • @ianalexthompson
      @ianalexthompson Před 6 měsíci +4

      Like this:
      def search_right_index(
      self,
      arr: list[tuple[int, int, int]],
      val: int
      ):
      left, right = 0, len(arr) - 1
      while left = val:
      right = mid - 1
      if arr[mid][0] < val:
      left = mid + 1
      return left
      So you can change it in the solution: j = self.search_right_index(schedule, schedule[i][1])

    • @KhyatiSatija
      @KhyatiSatija Před 6 měsíci

      same question

  • @kethankumarreddy4446
    @kethankumarreddy4446 Před 6 měsíci

    why aren't editorial are opening?

  • @itsexpel
    @itsexpel Před 5 měsíci

    can someone explain why the recursion is n^2 and not 2^n?

    • @jasondubon
      @jasondubon Před 2 měsíci

      before caching the runtime was 2^n, after caching it became n^2

  • @debadattabhattacharjee3171
    @debadattabhattacharjee3171 Před 6 měsíci +1

    How do I get the intuition? I understand the logic, but I cant help build up logic without watching your video? Please help sensei.

    • @tasneemayham974
      @tasneemayham974 Před 6 měsíci +1

      Just keep practicing, bro! The more you practice the more similar problems you encounter and you'll eventually become a pro! Remember there are endless LeetCode problems but only a couple of algorithms! Practice makes perfect!

  • @MrWuggles
    @MrWuggles Před 6 měsíci +1

    Oof a hard one

  • @karthikkongara2265
    @karthikkongara2265 Před 6 měsíci +2

    bro i done my code in c++ as
    class Solution {
    public:
    int recur(int i,vector &v,vector &dp){
    if(i >= v.size()) return 0;
    if(dp[i] != -1) return dp[i];
    int ans = INT_MIN;
    // dont include
    dp[i] = recur(i+1,v,dp);
    ans = max(ans,dp[i]);
    // include
    auto it = lower_bound(v.begin()+i,v.end(),vector{v[i][1],-1,-1});
    if(it != v.end()){
    int ind = it - v.begin();
    dp[i] = max(dp[i],v[i][2] + recur(ind,v,dp));
    }
    ans = max(ans,dp[i]);
    return ans;
    }
    int jobScheduling(vector& startTime, vector& endTime, vector& profit) {
    int n = endTime.size();
    vector v;
    for(int i=0;i

    • @Dancedfsk8
      @Dancedfsk8 Před 6 měsíci

      Doing this in c++ is like 10x harder...
      I'll try to put my answer if I finished it.

    • @shreehari2589
      @shreehari2589 Před 6 měsíci

      Bro just do it in python

    • @civilizedmonster
      @civilizedmonster Před 6 měsíci +4

      Here you go:
      class Solution {
      public:
      int jobScheduling(vector& startTime, vector& endTime, vector& profit)
      {
      vector jobs;
      int n=startTime.size();
      for(int i=0; i

    • @karthikkongara2265
      @karthikkongara2265 Před 6 měsíci

      @@civilizedmonster yeah got my mistake thanks bro

  • @RamSankarHarikrishnan
    @RamSankarHarikrishnan Před 3 měsíci

    this is literally a greedy problem

  • @tonyz2203
    @tonyz2203 Před 3 měsíci

    my stupid brain cant handle this problem.

  • @ashutoshjha2648
    @ashutoshjha2648 Před 6 měsíci +1

    why it will not work if i don't sort it,and just memoize with maxEndTime,index?
    i could't able to figure out the why

    • @kathirchidhambarapandy929
      @kathirchidhambarapandy929 Před 6 měsíci

      u need to sort to check for overlap its a greedy activity selection problem

    • @user-gs7xf6qt4l
      @user-gs7xf6qt4l Před 6 měsíci

      Since that is not optimal substructure for dp. An anology would be you need to calculate all parent nodes before calculating dp[this] in topological sort.

  • @yang5843
    @yang5843 Před 6 měsíci

    class Solution {
    int max = 0;
    int[][] s;
    Map map = new HashMap();

    public int jobScheduling(int[] startTime, int[] endTime, int[] profit) {
    s = new int[startTime.length][3];
    for (int i=0;ia[0]-b[0]);

    dfs(0);
    return max;
    }
    int dfs(int i) {
    if ( i == s.length ) return 0;
    if ( map.containsKey(i) ) return map.get(i);

    int next = dfs(i+1);

    int j = i;
    while ( j < s.length && s[j][0] < s[i][1] )
    j++;
    max = Math.max(next,s[i][2] + dfs(j));
    map.put(i,max);
    return max;
    }
    }