포스트

Remove Element

LeetCode 27. Remove Element

원문

Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The order of the elements may be changed. Then return the number of elements in nums which are not equal to val.

Consider the number of elements in nums which are not equal to val be k, to get accepted, you need to do the following things:

  • Change the array nums such that the first k elements of nums contain the elements which are not equal to val. The remaining elements of nums are not important as well as the size of nums.
  • Return k.

풀이

Python

nums를 순회하며 val과 값이 같은 원소가 나오면 제거한다.
knums의 초기 길이에서 제거한 횟수를 뺸 값과 같다.
list의 크기가 변하므로 k는 연산이 모두 끝난 후의 nums의 길이이다.

코드

1
2
3
4
5
6
7
8
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        ref = 0
        while ref < len(nums):
            if nums[ref] == val:
                nums.pop(ref)
            else: ref += 1
        return len(nums)

Java

  1. 정수 k를 선언한다. 값은 0으로 초기화해준다.
  2. nums를 순회하며 val과 값이 같은 원소가 나오면 넘어간다.
  3. 다른 값이 나오면 이때 인덱스를 i라고 했을 때 nums[k]nums[i]로 바꾸고, k에 1을 더한다.
  4. 순회가 끝나면 k를 반환한다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
    public int removeElement(int[] nums, int val) {
        int idx = 0;

        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != val) {
                nums[idx] = nums[i];
                idx++;
            }
        }

        return idx;
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.