코린이의 소소한 공부노트

[LeetCode/Medium] 137. Single Number II 본문

코딩테스트 풀이/JAVA

[LeetCode/Medium] 137. Single Number II

무지맘 2023. 1. 19. 00:02

1. Input

1) int[] nums

- nums의 요소 중 1개를 제외한 모든 요소들은 3번씩 등장한다.

 

2. Output

1) nums에 딱 1번 등장하는 요소를 찾아 반환

 

3. Constraint

1) 1 <= nums.length <= 3 * 10^4

2) - 2^31 <= nums[i] <= 2^31 - 1

 

4. Example

Input: nums = [2,2,3,2] -> Output: 3

 

5. Code

1) 첫 코드(2023/01/19)

import java.util.*;

HashMap<Integer,Integer> m = new HashMap<Integer,Integer>();
for(int i : nums){
    if(m.containsKey(i))
        m.replace(i, m.get(i)+1);
    else
        m.put(i, 1);
}

int answer = 0;
Set set = m.entrySet();
Iterator it = set.iterator();
while(it.hasNext()){
    Map.Entry e = (Map.Entry)it.next();
    if((int)e.getValue()==1) {
        answer = (int)e.getKey();
        break;
    }
}
return answer;

- 문제에서 요구한 솔루션은 linear runtime complexity, only constant extra space을 이용한 것이었는데 그렇지 못했다.

 

2) 조금 더 짧게 작성한 코드(2023/07/04)

import java.util.*;
class Solution {
    public int singleNumber(int[] nums) {
        HashMap<Integer,Integer> m = new HashMap<>();
        for(int i : nums)
            m.put(i, m.getOrDefault(i,0)+1);
        int answer = -1;
        for(int i : m.keySet())
            if(m.get(i)==1){
                answer = i; break;
            }
        return answer;
    }
}

- 아직도 모르겠다..