New 21 Game - Leetcode 837 - Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ก.พ. 2025

ความคิดเห็น • 46

  • @MgThompson
    @MgThompson ปีที่แล้ว +45

    I might think that, if the interviewer comes up with this problem, I will be sure they don't want to hire you.

  • @NeetCodeIO
    @NeetCodeIO  ปีที่แล้ว +46

    Yeahhhh, this is what I call a crackhead problem..

    • @dadhx8
      @dadhx8 ปีที่แล้ว +7

      At first I thought there was some "simple" solution using Bayes theorem, but as I thought about it more, I realized I had no clue wtf to do lol

  • @yolo3659
    @yolo3659 ปีที่แล้ว +5

    Tip: You can also use a queue instead of a dp array to make life easier. Just initially push the required amount of zeroes and ones and push the subsequent probabilities into the queue while popping the front elements. In the end since we have to return dp[0] in the normal implementation, we have to return the last element in the queue. Here is the C++ code.
    Note here window_sum is named as sums for simplicity.
    And max_points is renamed as maxs
    double new21Game(int n, int k, int maxs) {
    if((k-1+maxs)=k;i--){
    if(i

  • @dorothychristina2721
    @dorothychristina2721 ปีที่แล้ว +22

    Could you share some insights on how you break the problem, gather inputs from the problem statement ,say your approach as you go about when you see this kind of problems ?

  • @uptwist2260
    @uptwist2260 ปีที่แล้ว +10

    this was scary. thanks for the daily

  • @MrKB_SSJ2
    @MrKB_SSJ2 ปีที่แล้ว +1

    Yoooooooo THANK YOUUUUU FOR MAKING THIS RIGHT NOW

  • @itachid
    @itachid ปีที่แล้ว +15

    How am I supposed to come up with this in an interview?

  • @MoazMahmud
    @MoazMahmud ปีที่แล้ว +1

    I solved it the exact same way!
    I used the math formula you were talking about. Which is:
    windowSum = min(maxPoint, n - k + 1)

    • @johnnychang3456
      @johnnychang3456 ปีที่แล้ว

      Can you explain the formula? Thanks

    • @LarryFisherman5
      @LarryFisherman5 ปีที่แล้ว +1

      @@johnnychang3456 Basically, the n - k + 1 part is counting how many ones we have at initialization, since we have ones from k up to n, and then onwards it's all 0s. However, if maxPts is less than n - k + 1, we can't reach those 1s which are beyond k + maxPts, so they shouldn't be included in the window sum. But note that this can only happen when k + maxPts

    • @MoazMahmud
      @MoazMahmud ปีที่แล้ว

      @@LarryFisherman5 This is a great explanation 😃

  • @deadlyecho
    @deadlyecho ปีที่แล้ว +3

    Shouldn't the probability of the non optimal solution be O(m^k)? Since the depth of the tree is of magnitude of order k?

    • @himanshubarnwal1527
      @himanshubarnwal1527 11 หลายเดือนก่อน

      we can optimize it by using 2d dp of n*k size. So, it will be O(n*k).

  • @dark_all_day9311
    @dark_all_day9311 ปีที่แล้ว

    I got asked this in an MLE interview with 20 mins to solve it 😔 been an MLE for 3 years built out and scaled many pipelines, never needed anything close to the knowledge required for a problem like this one. they rly set me up to fail lol

    • @CS_n00b
      @CS_n00b 10 หลายเดือนก่อน

      would the recursive solution have been enough?

  • @ouchlock
    @ouchlock ปีที่แล้ว

    for testcase
    n=1
    k=0
    maxPts=2
    as we have [1,2] where only 1 is

    • @NeetCodeIO
      @NeetCodeIO  ปีที่แล้ว +1

      Not true. If we start at 0 and k is 0, then we can't draw any cards.

    • @ouchlock
      @ouchlock ปีที่แล้ว

      @@NeetCodeIO yes, you're right, thanks

  • @DarkOceanShark
    @DarkOceanShark ปีที่แล้ว

    I have been thinking about the solution in the same decision tree based approach like you, where I counted the number of solutions that give me value from k to n and, the number of solutions that give you a value of above or equal to k after previously being below k. I divided the former by latter and returned it as the answer. First and second passed but the third sample test case failed.
    I have realised the mistake now.

  • @dheereshagrwal
    @dheereshagrwal 5 หลายเดือนก่อน

    window_sum = max(0, min(n, k + maxPts - 1) - k + 1)

  • @sreesaiaditya2574
    @sreesaiaditya2574 ปีที่แล้ว

    Thank you. I really understood this problem and it is clearly explained.

  • @IntelliStar_
    @IntelliStar_ 4 หลายเดือนก่อน

    I was able to come up with the non optimal solution but failed to optimize further. I think it should be accepted because the question is medium...

  • @meemee417
    @meemee417 5 หลายเดือนก่อน

    Maybe the interviewer will take pity on you if you come up with the raw dp solution and will give you a hint for sliding window 🙏🙏

  • @devMarcus
    @devMarcus ปีที่แล้ว

    I haven't watched any really recent videos because I have been on break but has NeetCode always used a csgo crosshair for drawing?

  • @akashuday7107
    @akashuday7107 ปีที่แล้ว

    wait why arent you uploading on the Neetcode official channel/?

  • @Kan-JenLiu
    @Kan-JenLiu ปีที่แล้ว +1

    dangg..... this problem is just crazy...

  • @HelloWorld-lh1wk
    @HelloWorld-lh1wk 6 หลายเดือนก่อน

    well a good way to solve this problem in a interview is to click the end meeting button....

  • @YashVashistha-ot5ux
    @YashVashistha-ot5ux ปีที่แล้ว

    Please do the contest problems for each contest the hard ones atleast

  • @ashishdhal4614
    @ashishdhal4614 ปีที่แล้ว +1

    I solved it using dp first i multiplied the probability of that number with a recursive call then added all recursive calls formed by the max value loop . After watching the sliding window technique I feel stupid😢😢

  • @Amit-fn7bw
    @Amit-fn7bw ปีที่แล้ว

    Giving wrong answer on n = 185 , k = 183 , m = 2,
    correct output = 1,
    giving 62.1111
    class Solution {
    public:
    double helper(int n, int k , int m, int pts){
    if(pts >= k) return (pts

    • @solutionscorner
      @solutionscorner ปีที่แล้ว

      class Solution {
      public:
      double new21Game(int n, int k, int maxPts)
      {
      vector dp(n+1,0);
      double window_sum = 0;

      if(k == 0 || n >= k + maxPts)
      {
      return 1.0;
      }
      for(int i = k; i= 0; i--)
      {
      dp[i] = (double) window_sum/maxPts;
      double del = 0;
      if(i + maxPts

  • @shashivish2022
    @shashivish2022 ปีที่แล้ว

    Code does not works for Python 2 but works for Python3.

    • @NeetCodeIO
      @NeetCodeIO  ปีที่แล้ว +5

      Yes, that's because I'm using python3. No one really uses python2 anymore.

    • @chrisliu6444
      @chrisliu6444 9 หลายเดือนก่อน

      @@NeetCodeIO why is python2 not working but python3 working tho?

  • @harshmankodiya9397
    @harshmankodiya9397 ปีที่แล้ว

    why avg?

    • @NeetCodeIO
      @NeetCodeIO  ปีที่แล้ว

      Like I mentioned, if each branch has an equal probability, that implies we average.

  • @ccx0040
    @ccx0040 ปีที่แล้ว

    Wrote this in C++ but it's not running, please help me figure out the problem
    double new21Game(int n, int k, int maxPts) {
    vectordp(n + 1, 0);
    for(int i = k; i

    • @shishankrawat2105
      @shishankrawat2105 ปีที่แล้ว

      if(i+maxPts < k)
      remove = dp[i+maxPts]
      else if(i+maxPts

  • @notgreen11
    @notgreen11 ปีที่แล้ว +1

    is this one really that hard? seemed like a very easy DP problem when I first tried it, you’ve done many harder problems IMO so i’m surprised w your grading

    • @reactionchamber
      @reactionchamber ปีที่แล้ว +1

      relatively easy to come up with the recursive solution, but recognizing how to use a sliding window is quite a stretch imo

    • @meowmaple
      @meowmaple ปีที่แล้ว +1

      ur mum's easier