https://leetcode.com/problems/remove-element/?envType=study-plan-v2&envId=top-interview-150
숫자 배열 nums, 숫자 val이 주어졌을때 val을 '제자리에서' 제거합니다. 순서는 변경 될 수 습니다. 그리고 val과 같지않은 요소의 수를 반환해야 합니다.
같지 않은 요소의 수를 k 라고 가정했을 때
1. nums의 처음 k개의 요소는 val과 다른 값을 포함하도록 해야합니다. 나머지 요소들은 nums의 사이즈와 마찬가지로 중요하지 않습니다.
2. k를 반환해야 합니다
class Solution {
public int removeElement(int[] nums, int val) {
int k = 0;
List<Integer> tempArray = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if (nums[i] == val) {
tempArray.add(i);
} else {
k++;
}
}
int lastIndex = nums.length - 1;
for (int i = tempArray.size() - 1; i >= 0; i--) {
if (indexArr.get(i) == lastIndex) {
lastIndex--;
} else {
int temp = nums[tempArray.get(i)];
nums[tempArray.get(i)] = nums[lastIndex];
nums[lastIndex] = temp;
lastIndex--;
}
}
return k;
}
}
Runtime 0ms
class Solution {
public int removeElement(int[] nums, int val) {
int k = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != val) {
nums[k] = nums[i];
k++;
}
}
return k;
}
}
나머지 요소들은 nums의 사이즈와 마찬가지로 중요하지 않습니다.
라는 부분이 힌트였습니다. 문제의 표면적인 요구는 제자리서 삭제지만 요구사항을 잘 살펴보면 그저 k개의 갯수만큼만 val이 아닌 요소들을 앞부터 덮어씌워주기만 하면 되는 문제였습니다.