
정수 배열 nums와 정수 val이 주어지며, nums에서 val의 값과 같은 요소를 모두 제거하세요. 그런 다음, nums 배열에서 val과 값이 같지 않은 요소의 개수를 리턴하세요.
nums에서 val과 다른 요소의 개수를 k라고 할 때, 코드가 통과하려면 다음을 수행해야 합니다:
nums 배열을 변경하여 nums의 처음 k개 요소가 val과 다른 요소를 포함하도록 합니다. nums의 나머지 요소는 중요하지 않으며 nums의 크기도 중요하지 않습니다.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 배열을 전체 순회하도록 한다.
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;
}
}
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
}
}