class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> list = new ArrayList<Integer>();
		
		for (int i = 0; i < nums.length; i++) {
			if(list.contains(nums[i]))
				continue;
			else
				list.add(nums[i]);
		}
		
		for (int i = 1; i <= nums.length; i++) {
			if(list.contains(i)) {
				list.remove(list.indexOf(i));
			}else {
				list.add(i);
			}
		}			
		
		return list;	
    }
}

이 방법은 Time Limit Exceeded

그래서, HashMap사용 (HashMap의 containsKey는 O(1)이라고 함)

class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		List<Integer> list = new ArrayList<Integer>();
		
		for (int i = 0; i < nums.length; i++) {
			map.put(nums[i], nums[i]);
		}
		for (int i = 1; i <= nums.length; i++) {
			if(!map.containsKey(i))
				list.add(i);
			else
				continue;
		}		
		return list;		
    }
}

 

https://soft.plusblog.co.kr/74

 

자바 컬렉션(Java Collection)들의 Big O (시간 복잡도, Time Complexity)

자바는 다양한 컬렉션 타입들을 제공한다. 이 컬렉션 타입들은 내부 구현에 따라 다양한 시간 복잡도를 갖는데, 이 특징을 잘 알고 사용해야 불필요한 성능저하를 피할 수 있다. List Add Remove Get C

soft.plusblog.co.kr