본문 바로가기
개발/알고리즘

[leetcode] week1 - Move Zeroes

by ny0011 2020. 4. 13.
반응형

https://leetcode.com/explore/challenge/card/30-day-leetcoding-challenge/528/week-1/3286/

 

0을 모두 배열의 끝으로 옮기는 것으로 연산을 최대한 줄이는 것이 목표다.

 

풀이

- p라는 포인터를 설정해서 0이 아닌 숫자를 만날 때까지 멈춰있다가 0을 만나면 1씩 증가한다.

1. 배열을 처음부터 끝까지 탐색한다.

2. 0을 찾으면 0을 지우고 0을 배열 맨 뒤에 더한다.

3. 0이 아니면 p를 1증가한다.

 

코드

del은 O(n)이고 if는 0의 개수(n-p)니까 O(n(n-p))

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = 0
        p = 0
        end = len(nums)
        while i < end:
            if nums[p] == 0:
                del nums[p:p+1]
                nums += [0]
            else:
                p+=1
            i += 1

 

 

'개발 > 알고리즘' 카테고리의 다른 글

485. Max Consecutive Ones  (0) 2021.01.22
파이썬 알고리즘 꿀팁  (0) 2020.12.09
[leetcode] week1 - Maximum Subarray  (0) 2020.04.12
[leetcode] week1 - Happy Number  (0) 2020.04.11
[leetcode] week1 - single number  (0) 2020.04.10

댓글