Move Zeroes - Leetcode 283 - Python

Sdílet
Vložit
  • čas přidán 2. 07. 2024
  • 🚀 neetcode.io/ - A better way to prepare for Coding Interviews
    🥷 Discord: / discord
    🐦 Twitter: / neetcode1
    🐮 Support the channel: / neetcode
    ⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
    💡 CODING SOLUTIONS: • Coding Interview Solut...
    💡 DYNAMIC PROGRAMMING PLAYLIST: • House Robber - Leetco...
    🌲 TREE PLAYLIST: • Invert Binary Tree - D...
    💡 GRAPH PLAYLIST: • Course Schedule - Grap...
    💡 BACKTRACKING PLAYLIST: • Word Search - Backtrac...
    💡 LINKED LIST PLAYLIST: • Reverse Linked List - ...
    💡 BINARY SEARCH PLAYLIST: • Binary Search
    📚 STACK PLAYLIST: • Stack Problems
    Problem Link: leetcode.com/problems/move-ze...
    0:00 - Read the problem
    3:00 - Drawing Explanation
    6:36 - Coding Explanation
    leetcode 283
    This question was identified as an interview question from here: github.com/xizhengszhang/Leet...
    #partition #python
    Disclosure: Some of the links above may be affiliate links, from which I may earn a small commission.
  • Věda a technologie

Komentáře • 90

  • @timwebster85
    @timwebster85 Před rokem +8

    Thank you for taking the time to do this, much appreciated!

  • @abhimalyachowdhury7835
    @abhimalyachowdhury7835 Před 2 lety +31

    I absolutely love your approach and explanation.... Please upload more Amazon interview questions..I have interview coming up....

    • @hacksbsb
      @hacksbsb Před rokem +4

      did you get the offer

  • @deckardbarnes6715
    @deckardbarnes6715 Před 2 lety +8

    Wish I found this channel before I got this question during my interview

  • @PremPal-uy4nm
    @PremPal-uy4nm Před rokem +5

    I was confused in this line I thought He did not wrote the hole condition but then I realise if 0 is present at ith index it will return fasle and if not then it will reurn true. So we don't hav to write hole condition here. Interesting humm!

  • @atulkumar-bb7vi
    @atulkumar-bb7vi Před rokem

    Nice insights of simple algorithm. Thanks!

  • @jesussepulveda9992
    @jesussepulveda9992 Před 2 lety +1

    Thank you for your work neet :D

  • @Cruzylife
    @Cruzylife Před 2 lety +2

    neetcode is the best.. I am thinking of doing the neetcode gauntlet!! Do every problem that neetcode has completed from his first upload!!! Then I will be ready for MANGA

  • @kalyaninagre2148
    @kalyaninagre2148 Před 10 měsíci

    your efforts are appreciated !!!!

  • @subhamthemusicalguy8851

    Thanks a lot for this clear explanation

  • @durgeshkudalkar6574
    @durgeshkudalkar6574 Před 2 lety

    Really good explanation!

  • @shadon_official2510
    @shadon_official2510 Před 2 lety +1

    This is such an awesome video

  • @Andrypka
    @Andrypka Před rokem

    Greet explanation, thanks alot!

  • @prateek8837
    @prateek8837 Před rokem +1

    when 0s are not present in the list, this method swaps all the elements with itself. However, the following doesn't
    var moveZeroes = function(nums) {
    let left = 0;
    let right = 1;
    while(right < nums.length){
    if(nums[left]){
    left++;
    }
    if(nums[right] && nums[left] === 0){
    const temp = nums[right];
    nums[right] = nums[left];
    nums[left] = temp;
    left++;
    }
    right++;
    }
    return nums;
    };

  • @fabiajero
    @fabiajero Před rokem +1

    Thank you for your work, It would be amazing if we can get more than 1 solution, I guess that we have to find the worse and the best solution in an interview. Is this the best one? Cheers!

  • @gremlan6419
    @gremlan6419 Před rokem +3

    When I attempted myself, I kept trying to push the zeros forward rather than push the non-zeros back. I missed this insight and couldn't solve it.

  • @sherifessam1560
    @sherifessam1560 Před rokem

    Man, you are just great

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

    Thanks a ton for simplifying problem statement at beginning because i derived similar logic with input = {0,0,0,12,4}
    but when change input = {8, 2, 0, 1,...} from java algo tutorial course, i got confused thinking my logic doing swap when leading pos elements are not zero but your simplifying problem here is trick i learn to justify to interviewers
    my var name was zeroPos but later renamed to slowPointer but left & right seem more suited :)

  • @Kushagra_21
    @Kushagra_21 Před 2 lety +2

    Hi , You are doing great job!!....Could you please help in the question -- Making a Large Island (Leetcode 827).
    Would Really appreciate that!!
    Thanks a lot for all these videos :)

  • @sawyerburnett8319
    @sawyerburnett8319 Před 7 měsíci +1

    Ugh. I had this so close doing the problem on my own but caught up on some edge cases. Explanation is helpful!

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

      Same

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

      me too unless i un-pause other youtuber video tutorial for java who said to use pointer for zero;s position

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

    You're Amazing!

  • @TURALOWEN
    @TURALOWEN Před rokem

    thank you!

  • @user-ft1rj5jh3n
    @user-ft1rj5jh3n Před 2 lety +9

    Hi neetcode, thanks for posting i love ur videos so much! I would appreciate if u can post video on Longest Increasing Path in a Matrix!!

    • @NeetCode
      @NeetCode  Před 2 lety +16

      I got you fam, I'll upload it tomorrow morning!

    • @user-ft1rj5jh3n
      @user-ft1rj5jh3n Před 2 lety +3

      @@NeetCode i love you ❤️

  • @sameer_sah
    @sameer_sah Před 10 měsíci +1

    If you are confused about where does this patterns fits, read about partition alorithm. Thanks Neetcode.

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

      specifically, lomuto's partition algorithm

  • @pl5778
    @pl5778 Před rokem +6

    great video! A followup question is how would you keep all the zeros at the beginning and keeping the non zeros in order? E.g. [1,0,3,0,12] The only way I've found is using your method but start iterating at the end of the array. Wondering if there is another way to solve it. Thanks

    • @MaazKhan-lw6kz
      @MaazKhan-lw6kz Před 4 měsíci

      def solution(nums: list)->list:
      count = nums.count(0)
      for i in range(count): nums.remove(0)
      for i in range(count): nums.append(0)
      return nums
      #Leetcode test cases
      nums = [0, 1, 0, 3, 12]
      result = solution(nums)
      expected_output = [1, 3, 12, 0, 0]
      assert result == expected_output, f"Expected {expected_output}, got {result}"
      nums = [0]
      result = solution(nums)
      expected_output = [0]
      assert result == expected_output, f"Expected {expected_output}, got {result}"

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

    I coudln't solve this myself, so thanks a bunch!

  • @ChaseHatch
    @ChaseHatch Před 2 lety +2

    integs = [0,1,0,3,12]
    integs.sort()
    for x in range(len(integs)-1,-1,-1):
    if integs[x] == 0:
    a = integs.pop(x)
    integs.append(a)
    In [47]: integs
    Out[47]: [1, 3, 12, 0, 0]

    • @MrMinecraftGamer456
      @MrMinecraftGamer456 Před 2 lety

      sort doesn’t work. You need to maintain order of non-zeros, which doesn’t necessarily mean sorted ordsr

    • @ChaseHatch
      @ChaseHatch Před 2 lety +1

      @@MrMinecraftGamer456 the for loop will still work here without the sort

    • @ChaseHatch
      @ChaseHatch Před 2 lety

      @@MrMinecraftGamer456
      In [7]: integs = [0,1,0,3,12]
      In [10]: [integs.append(integs.pop(x)) for x in range(len(integs)-1,-1,-1) if integs[x] == 0]
      In [11]: integs
      Out[11]: [1, 3, 12, 0, 0]

    • @avijitdey992
      @avijitdey992 Před rokem

      @@ChaseHatch bro shut up

    • @miglioredroid9446
      @miglioredroid9446 Před 10 měsíci

      Too many functions, you should know how to do it with basic data and structures.

  • @inrmh
    @inrmh Před 4 měsíci

    thanks : )

  • @shubhanshusingh8529
    @shubhanshusingh8529 Před rokem +1

    #Easy Python Solution - Two Pointers Approach
    class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
    """
    Do not return anything, modify nums in-place instead.
    """
    l = 0
    for r in range(1,len(nums)):
    if nums[l] == 0 and nums[r] != 0:
    nums[l],nums[r] = nums[r],nums[l]
    l += 1
    elif nums[l] != 0:
    l += 1

  • @PremPal-uy4nm
    @PremPal-uy4nm Před rokem +1

    My notes for this problem
    """
    Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements.
    Note that you must do this in-place without making a copy of the array.
    """
    """
    Approach 1: Using 2 pointer
    TC O(n) & SC O(1)
    1. Basically, It is 2 pointer quesion. It seems very easy but the way it works is quite interesting.
    2. Left pointer is putting every none-zero element at the right place. Wheneve left pointer find zero elemnt it will stick with it.
    3. Right pointer is helping left pointer to find and put non-zero element at right place. we can say that right pointer is
    showing way to left pointer where to go.
    4. What happens if we start right pointer from the second element instead of first?
    - In this case it will give wrong output. Because right pointer swap every non-zero item to left pointing item.
    so it will chage the order of list.
    - Swapping also occurs when right and left pointer both start from 0th position but in this case the swapping of element
    happens at the same place. which does not changes the order.
    """
    def moveZeroes(nums):
    l=0
    for r in range(0,len(nums)): #4
    if nums[r]:
    nums[l],nums[r]=nums[r],nums[l]
    l+=1
    return nums
    print(moveZeroes([0,1,0,3,12]))

    • @user-pc9wm8pr3b
      @user-pc9wm8pr3b Před 7 měsíci

      or just do : def moveZeroes(self, nums):
      for i in range(len(nums)):
      if nums[i] == 0:
      nums.pop(i)
      nums.append(0)

  • @PixelPulse168
    @PixelPulse168 Před rokem +1

    You are assuming the first element must be a zero. You need to initialize l and r by iterating until the first zero is encountered.

  • @IdiotOfftheInternet
    @IdiotOfftheInternet Před 2 lety +10

    How can " if nums[r]:" mean that number is not zero?

    • @CostaKazistov
      @CostaKazistov Před 2 lety +6

      boolean conversion of number greater than 0

    • @hellowrld9888
      @hellowrld9888 Před 11 měsíci

      Block of code after If statememt will run only if the condition is True. The condition will be False if it has a value of 0, anything other than 0 is True.

    • @venkatasaivs5566
      @venkatasaivs5566 Před 11 měsíci

      Not zero

    • @user-pt4kl4ww2h
      @user-pt4kl4ww2h Před 5 měsíci +1

      U can also write num[r]!=0

    • @Jack-ss4re
      @Jack-ss4re Před dnem

      @@hellowrld9888thats not what he asked

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

    clean af

  • @karthikraghuraman3352
    @karthikraghuraman3352 Před 7 měsíci

    Wouldnt this solution swap even the non zeroes? for e.g. if the array is 1,4,3,0,2,1. During the second iteration wouldnt the numbers get swapped? How does this code ensure that only zeroes get swapped?

  • @Ivan-ek6kg
    @Ivan-ek6kg Před 2 lety

    nums[l], nums[r] = nums[r], nums[l], Do you means it will de these two at the same time, so we do not need a temp variable to swap. But we can not separate it to two line in python, right?

  • @timanb2491
    @timanb2491 Před 2 lety +1

    maaaaaaan i failed with this taks on interview 2 weeks ago

  • @bishowahib2736
    @bishowahib2736 Před 2 lety +1

    how about the following solution, is it as efficient?
    for i in range(len(nums)):
    if nums[i] == 0:
    nums.remove(nums[i])
    nums.append(0)

    • @NeetCode
      @NeetCode  Před 2 lety +10

      Very clean, but I think removing from the middle of an array is O(n) time complexity. So this would be O(n^2)

    • @abhimalyachowdhury7835
      @abhimalyachowdhury7835 Před 2 lety

      Won't it through an error as list size changed while iteration...

    • @anshbhatia1
      @anshbhatia1 Před 2 lety

      Doesn't work for [0,0,1]
      Try this:
      i = 0

      while i < len(nums):
      if nums[i] == 0:
      nums.remove(nums[i])
      nums.append('0')
      else:
      i+=1

    • @anonymoustv8604
      @anonymoustv8604 Před 2 lety

      @@anshbhatia1 what do you mean it won't work for [0,0,1]? It will work

  • @whammie9497
    @whammie9497 Před rokem

    On the last line, you don't need to return anything because the problem says so

  • @barnoma-soz
    @barnoma-soz Před rokem +4

    Unfortunately, your solution doesn't go with this input: nums = [1,0,1]
    The below solution deals with the abovementioned cases as well:
    def move_zeros(arr):
    i, j = 0, 1
    while j < len(arr):
    if arr[i] == 0 and arr[j] != 0:
    arr[i], arr[j] = arr[j], arr[i]
    i += 1
    j += 1
    elif arr[i] != 0:
    i += 1
    j += 1
    else:
    j += 1

    • @cherylto5898
      @cherylto5898 Před rokem

      I would also move j+=1 outside the if/else and just write it once.

    • @barnoma-soz
      @barnoma-soz Před rokem

      @@cherylto5898 yeahh) it would be better

    • @ronsinha21
      @ronsinha21 Před rokem

      Why the solution doesn't work for [1,0,1] coding is based on logic...if it doesn't work for some input then the logic is wrong....Logic is correct and it will work

    • @wayne4591
      @wayne4591 Před rokem +1

      Of course the solution will work. See below step by step:
      1. L = 0, R = 0, nums[R=0] = 1. So nums[R=0] != 0, Swap nums[L=0] = 1and nums[R=0] = 1, and L += 1. Current Array [1, 0 ,1]
      2. L = 1, R = 1, nums[R=1] = 0, So nums[R=1] == 0, No action. Current Array[1, 0 ,1]
      3. L = 1, R = 2, nums[R=2] = 1, So nums[R=2] != 0, Swap nums[L=1] = 0 and nums[R=2] = 1 and L += 1. Current Array [1, 1, 0]
      R = 3 > 2 , loop ends. And final array is [1, 1, 0], which is the correct output

  • @JustFuguFish
    @JustFuguFish Před 2 lety

    If you pop the 0 and append a 0 at the end of the list wont work?

    • @d3v1n302418
      @d3v1n302418 Před 2 lety

      I'm not sure that would count as in place because it would technically change the size of the array, ex in Java its a sized array where the size can't change

    • @ayoubalem865
      @ayoubalem865 Před 2 lety +1

      If you mean by poping (removing) you will end up with an O(n^2) because removing from the middle is O(n) for arrays ! btw it is correct but not efficient !

  • @jjhassy
    @jjhassy Před 10 dny

    it frustrates me how simple the solution was

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

    Why are you returning? It's clearly mentioned not to return anything

  • @tcgys
    @tcgys Před rokem

    7:24 bro just made ad for python

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

    Why did we assume that 0th index has element zero

  • @LauraWinterisYourMom
    @LauraWinterisYourMom Před 2 lety

    Where is the partition though i am confused

    • @theworldofrandomness2734
      @theworldofrandomness2734 Před rokem

      No partition is performed. It is a pointer method in which left starts from start index and right, one greater than start index. if R is greater than L, swap is performed else R moves +1

    • @farazahmed7
      @farazahmed7 Před 10 měsíci

      partition is done in quick sort only.

  • @prashanthpradeep326
    @prashanthpradeep326 Před 11 měsíci

    they clearly told don't return anything

  • @vishnu00764
    @vishnu00764 Před měsícem

    I just did remove and append like an idiot lol

  • @abisheknair3545
    @abisheknair3545 Před 11 měsíci

    How about just moving all the non-zero values to the start and just adding zeroes to the end. Beats 99.48 python users apparently

  • @saraseghidleab4145
    @saraseghidleab4145 Před 2 lety

    Where the videos that people are talking about. How helpful the videos are. Do you have to pay for it???

  • @sairamkandgule8957
    @sairamkandgule8957 Před 2 lety

    void moveZeroes(vector& v) {
    int n=v.size();
    int next=0;
    for(int i=0;i

  • @peskovdev
    @peskovdev Před 9 měsíci +1

    LeetCode: Do not return anything, modify nums in-place instead
    NeetCode: return nums

  • @mjohnson510
    @mjohnson510 Před 2 lety +1

    it says don't return anything lol

    • @NeetCode
      @NeetCode  Před 2 lety +4

      lol whoops i missed that part

    • @mjohnson510
      @mjohnson510 Před 2 lety

      @@NeetCode I think now you have to
      for i = l in range(nums)
      // set the remaining elements to zero
      // at the index starting from i
      // num[i] = 0
      But it happens 🤣🙃

    • @CostaKazistov
      @CostaKazistov Před 2 lety

      well spotted👍

  • @hideme420
    @hideme420 Před 2 lety +1

    my approach is accepted but, with 283ms is it worthfull ?

    • @whimsicalkins5585
      @whimsicalkins5585 Před 9 měsíci

      my approach was around 69ms and it only beat 7 % of people. its better to learn an algorithm that works in o(n). Your code worked for 238ms because of o(n)^2 time complexity like mine