문제 136. Single Number
주어진 array안에 쌍이 아닌 홀로 있는 숫자를 찾는 문제이다.
Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.
1 2 3 4 5 6 7 8 9 10 11
| Input: nums = [2,2,1] Output: 1
Input: nums = [4,1,2,1,2] Output: 4
Input: nums = [1] Output: 1
|
풀이 코드 1 : 비트연산자
- 비트 연산자(^) : 대응되는 비트가 서로 같으면 0을, 다르면 1을 반환함. (비트 XOR 연산)
- Runtime 1 ms Memory 47.9 MB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class _0136SingleNumber { public static int singleNumber(int[] nums) {
int val=0; for(int i=0;i<nums.length;i++){ val^=nums[i]; } return val;
}
public static void main(String[] args) { int[] nums = System.out.println(singleNumber(nums)); } }
|
풀이2 : HashMap사용
- HashSet : contains()을 통해 있으면 remove, 없으면 add해서 남은 값을 출력
- Runtime 10 ms Memory 40 MB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class _0136SingleNumber { public static int singleNumber(int[] nums) {
Set<Integer> box = new HashSet<>(); for (int i = 0; i < nums.length; i++) { if (box.contains(nums[i])) { box.remove(nums[i]); } else { box.add(nums[i]); } } return box.stream().findFirst().get(); }
public static void main(String[] args) { int[] nums = System.out.println(singleNumber(nums)); } }
|
성능 비교
|
비트연산자사용 |
해시맵사용 |
Runtime |
1 ms |
10 ms |
Memory |
47.9 MB |
40 MB |
다른 문제 풀이가 보고싶다면?