Written

스터디 4주차 / leetcode / Remove Element / JavaScript 본문

알고리즘 문제풀이

스터디 4주차 / leetcode / Remove Element / JavaScript

steeringhead 2023. 2. 1. 16:53

https://leetcode.com/problems/remove-element/

 

Remove Element - LeetCode

Remove Element - Given an integer array nums and an integer val, remove all occurrences of val in nums in-place [https://en.wikipedia.org/wiki/In-place_algorithm]. The relative order of the elements may be changed. Since it is impossible to change the leng

leetcode.com

Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The relative order of the elements may be changed.

Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result. It does not matter what you leave beyond the first k elements.

Return k after placing the final result in the first k slots of nums.

Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.

Custom Judge:

The judge will test your solution with the following code:

int[] nums = [...]; // Input array
int val = ...; // Value to remove
int[] expectedNums = [...]; // The expected answer with correct length.
                            // It is sorted with no values equaling val.

int k = removeElement(nums, val); // Calls your implementation

assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i < actualLength; i++) {
    assert nums[i] == expectedNums[i];
}

If all assertions pass, then your solution will be accepted.

 

Example 1:

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).

Example 2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).

 

Constraints:

  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

앞서 풀었던 26번과 유사한 문제입니다.

nums로 주어지는 배열에서 val로 넘어오는 값을 제거하는 코드를 구현하면 됩니다.

 

newNums라는 새로운 변수에 nums.filter()를 사용합니다. filter함수는 인자로 함수를 받기 때문에, 화살표 함수를 사용하여 nums의 element중에 val과 같지 않은 요소들만 남겼습니다. filter는 원 배열을 훼손하지 않고 새로운 배열을 반환해주기 때문에 newNums에는 기존의 nums에서 val값을 제외시킨 값들만 담긴 새로운 배열이 담겨있습니다. 그리고 마지막에 입력으로 넘어온 nums에 newNums의 값들을 복사해주고 newNums의 length를 반환하면 끝나게 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val)
    {
        let newNums = nums.filter((element) => {
            return element !== val;
    });
 
    for (let i=0; i<newNums.length; i++)
    {
        nums[i] = newNums[i];
    }
 
 
    return newNums.length;
};
cs

 

Comments