LeetCode Next Greater Element I Solution Explained - Java

แชร์
ฝัง
  • เผยแพร่เมื่อ 3 ธ.ค. 2024

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

  • @LuisMorales-yx8di
    @LuisMorales-yx8di 3 ปีที่แล้ว +13

    It would be cool if you could discuss time and space complexity.

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

    Could you possibly discuss runtime as you go through these

    • @LuisMorales-yx8di
      @LuisMorales-yx8di 3 ปีที่แล้ว

      +1

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

      @@LuisMorales-yx8di +1000 -1000

    • @chaoluncai1607
      @chaoluncai1607 2 ปีที่แล้ว

      as the worst case scenario is stack push and pop each element in nums2[] once, and we have to loop through every element in nums1[] for the result, hence I think it's O(2*nums2.length + nums1.length) = O(nums1.length+nums2.length)

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

    I thought that i could do it without the stack, going through the array from 1 to n-1 but with the decreasing case at the end you made me realize that i can't.
    Thank you

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

      public static int[] nextGreaterElement(int[] nums1, int[] nums2) {
      int[] nextGreaterElements = new int[nums1.length];
      int nextGreaterElement = -1;
      for (int k = 0; k < nums1.length; ++k) {
      nextGreaterElement = -1;
      for (int i = 0; i < nums2.length; ++i) {
      if (nums2[i] == nums1[k]) {
      for (int j = i + 1; j < nums2.length; ++j) {
      if (nums2[j] > nums1[k]) {
      nextGreaterElement = nums2[j];
      break;
      }
      }
      break;
      }
      }
      nextGreaterElements[k] = nextGreaterElement;
      }
      return nextGreaterElements;
      }

    • @AmgadDeyaa
      @AmgadDeyaa 2 หลายเดือนก่อน

      the stack is an array with some constraints literally you can implement the stack using array but here we are using the concept of the stack

  • @vivekshokeen1192
    @vivekshokeen1192 2 ปีที่แล้ว

    We should traverse from the backside of the nums2 array for more intuitive approach

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

    sir how to get this level approach for doing such types of question?

  • @amrholo4445
    @amrholo4445 2 ปีที่แล้ว

    Thanks a lot, sir
    may you discuss the time and space complexity please, I find it hard to come up with it myself

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

    Your explanation is just wow!

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

    there is a bug : if there are some duplicted numbers in the array, then the value of key in the hasMap will be overwrited.

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

      It's guranteed that there's no duplicates

  • @zihaosong1514
    @zihaosong1514 3 ปีที่แล้ว

    Thanks for your explanation!

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

    It is a bad idea to modify nums1. If a function returns an array you don't expect the input array to be modified. It also makes the code less readable;

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

    what if array is ar1=[1,2,3,4] ar2=[1,4,2,3]
    stack [1]-> 4 comes , hashmap becomes ->(1,4)
    stack[4]-> 2 comes , False
    stack[4,2]-> 3 comes False
    Final answer -> [4,-1,-,1,-1]
    expected -[4,3,-1,-1]
    for this condition your code is not working?
    let me know if i am understanding your code wrong-> else solution.

    • @shubhammishra6119
      @shubhammishra6119 3 ปีที่แล้ว

      Instead of Peek you should stack last element

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

    Can anyone help me with the time complexity of the nested loops in the given solution?

  • @syedmehdiabbas1588
    @syedmehdiabbas1588 4 ปีที่แล้ว

    I love your humor Nick

  • @srinadhp
    @srinadhp 3 ปีที่แล้ว

    great explanation! Thank yoU!

  • @bisujin1685
    @bisujin1685 4 ปีที่แล้ว

    Very good explanation thanks

  • @rahuldabas8233
    @rahuldabas8233 4 ปีที่แล้ว

    great explanation dude!!

  • @VinayKumar-xs6el
    @VinayKumar-xs6el 5 หลายเดือนก่อน

    You are just a Legend

  • @lifeofme3172
    @lifeofme3172 4 ปีที่แล้ว +2

    I don't like hit me up 😂 good explanation

  • @amaan0
    @amaan0 2 ปีที่แล้ว

    Brooooo! Awesome explaination .❤

  • @harshithahprabhu6220
    @harshithahprabhu6220 4 ปีที่แล้ว

    what's the time complexity?

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

      O(nums1.length + nums2.length) ~ O(m+n)

    • @sumansumann8947
      @sumansumann8947 4 ปีที่แล้ว

      @@iamnoob7593 as there is a while loop inside the first for loop ,, how it would be linear time complexity??

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

      @@sumansumann8947 worst case if u keep inserting elements in stack. After inserting last element in stack.. for is done no more.... It's linear.
      Analyze on paper.

  • @chodingninjas7415
    @chodingninjas7415 5 ปีที่แล้ว

    great explanation

  • @aravindhravi2307
    @aravindhravi2307 4 ปีที่แล้ว

    This is beautiful

  • @rafishaik2496
    @rafishaik2496 2 ปีที่แล้ว

    explain nge2 leet code solution

  • @quirkyquester
    @quirkyquester 4 ปีที่แล้ว

    amazing explanation! Thank you!

  • @АдемаЕргара
    @АдемаЕргара 4 ปีที่แล้ว

    Your runtime complexity here is O(N^2 ), right?

    • @alaaeldin-khaled
      @alaaeldin-khaled 2 ปีที่แล้ว +1

      nope.
      watch Abdul Bari videos about time complexity on youtube

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

    Hey Nick I know its 4 years sice the upload can you still help me solve this can't figure out whats the mistake in this
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
    HashMap mp = new HashMap();
    int p = -1;
    // int[] reversedNums2 = Arrays.copyOf(nums2, nums2.length);
    // reverseArray(reversedNums2);
    mp.put(nums2[nums2.length -1],-1);
    int max = nums2[nums2.length-1];
    for(int i = nums2.length-2; i>=0; i--){
    int current= nums2[i];
    if(current < max){
    if(i!=nums2.length && nums2[i+1] > current) max = nums2[i+1];
    mp.put(current,max );
    }
    else mp.put(current,-1);
    max = Math.max(current,max);
    }
    int[] res = new int [nums1.length];
    for(int i =0; i< nums1.length; i++){
    res[i] = mp.get(nums1[i]);
    }
    return res;
    }

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

      Why did you reverse the array

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

      @@whoami8247 that line has been commented plz look closely