LeetCode 27. Remove Element

hwibaski·2023년 8월 22일

ps

목록 보기
2/12

27.Remove Element

문제

정수 배열 nums와 정수 val이 주어지며, nums에서 val의 값과 같은 요소를 모두 제거하세요. 그런 다음, nums 배열에서 val과 값이 같지 않은 요소의 개수를 리턴하세요.

nums에서 val과 다른 요소의 개수를 k라고 할 때, 코드가 통과하려면 다음을 수행해야 합니다:

  • nums 배열을 변경하여 nums의 처음 k개 요소가 val과 다른 요소를 포함하도록 합니다. nums의 나머지 요소는 중요하지 않으며 nums의 크기도 중요하지 않습니다.
  • k를 반환합니다.

Example 1:

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]

Example 2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]

의사코드 또는 풀이 계획

1. nums 배열의 첫 번째 인덱스를 가리키는 포인터를 2개 사용한다.(각각 lt, rt)
2. 하나의 포인터(rt)를 증가시키면서 val 값과 같은지 비교한다.
3. nums[rt]와 val이 같지 않다면 nums[lt]에 nums[rt]를 할당한다.
4. 해당 경우에는 lt 값을 하나 증가시킨다.
5. rt 값은 nums를 순회하는 반복문의 인덱스로 사용되고 있으므로 각각의 순회마다 하나씩 증가하여 nums 배열을 전체 순회하도록 한다.

풀이

  • 시간 복잡도: O(n)
  • 공간 복잡도: O(1)
  1. java
class Solution {
    public int removeElement(int[] nums, int val) {
        int lt = 0;

        for (int rt = 0; rt < nums.length; rt++) {
            if (nums[rt] != val) {
                nums[lt] = nums[rt];
                lt++;
            }
        }
        
        return lt;
    }
}
  1. kotlin
class Solution {
    fun removeElement(nums: IntArray, `val`: Int): Int {
        var lt = 0

        for (rt in 0 until nums.size) {
            if (nums[rt] != `val`) {
                nums[lt] = nums[rt]
                lt++
            }
        }

        return lt
    }
}
class Solution {
    fun removeElement(nums: IntArray, `val`: Int): Int {
        var counter = 0
        nums.forEach { if (it != `val`) nums[counter++] = it }

        return counter
    }
}

0개의 댓글