https://leetcode.com/problems/remove-element/?envType=study-plan-v2&envId=top-interview-150
Remove Element - LeetCode
Can you solve this real interview question? 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 order of the elements may be changed. Then r
leetcode.com
🤣 문제 설명
- 정수 배열 nums 와 정수 val 이 주어진다.
- nums 중 val 과 같은 값을 제거하고 남은 nums 의 크기 k를 반환해야한다.
- 0 <= nums.length <= 100
- 0 <= nums[i] <= 50
- 0 <= val <= 100
😊 문제 해결
- 꼭 배열의 요소 값을 삭제하고 k가 배열의 크기와 일치해야 한다는 편견을 버리면 더 쉽게 풀린다.
- 우리는 단지 nums 배열에서 val 과 같지 않은 값의 수가 얼마나 있는지에 집중하고 요소들을 배열 앞으로 당겨주면 된다.
🥲 시간복잡도
O(nums.length) 이다. 100 이하이므로 문제 없다.
🙂 공간복잡도
정수 k 를 선었을 뿐이기 때문에 O(1) 이다.
😉 정답
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;
}
}
😗 개선사항
- int [] 를 ArrayList 로 바꾸어 removeAll 메서드를 사용하거나, stream 으로 filter 를 사용해 새로운 배열을 만들어 참조를 넘기려 했지만, 올바르게 return 되지 않았다.
- 구글링 해보니 참조문제로 인식되었고, 새로운 배열을 생성하지 않고 투포인터로 해결하니 생각보다 쉽게 해결되었다
- 이후 정답에 있어서 구글링을 해보니 많은 사람들이 나와 같은 방식으로 풀어서 해당 코드의 개선사항은 딱히 보이지 않았다.
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[LeetCode] 169번 (Majority Element) (0) | 2023.08.25 |
---|---|
[LeetCode] 80번 (Remove Duplicates Sorted Array 2) (0) | 2023.08.25 |
[LeetCode] 26번 (Remove Duplicates Sorted Array 1) (0) | 2023.08.24 |
[자바 문법] 코딩테스트에 필요한 문법 정리 (0) | 2023.08.23 |
[LeetCode] 88번(Merge Sorted Array) (0) | 2023.08.22 |