본문 바로가기
Algorithm/LeetCode

Leetcode - 448. Find All Numbers Disappeared in an Array

by HaningYa 2020. 4. 23.
728x90

 

[Must do Easy Question]

 

How to effectively use LeetCode to prepare for interviews!! - LeetCode Discuss

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

Find All Numbers Disappeared in an Array - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


문제

Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.

Find all the elements of [1, n] inclusive that do not appear in this array.

Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.

Example:

Input: [4,3,2,7,8,2,3,1]

Output: [5,6]


1부터 n 까지 숫자로 이루어진 n 사이즈의 배열이 있다. 어떤 수는 하나만 존재하고 어떤수는 두번 존재한다.

이 배열에서 1부터 n까지의 숫자중 없는 숫자를 찾아라. O(n)안에 으로 구현 해봐라.

 

1부터 n 까지의 배열을 만들어 놓고 nums에 있는 수를 빼면 될것 같다.

import java.util.*;
class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> answer = new ArrayList();
        for(int i = 1 ; i < nums.length+1 ; i++){
            answer.add(i);
        }
        for(int i = 0 ; i < nums.length ; i++){
            for(int j = 0 ; j < answer.size() ; j++){
                if(nums[i] == answer.get(j)){
                    answer.remove(j);
                    break;
                }
            }
        }
        return answer;
    }
}

 

 

느리다.  Time Limit Exceed 떳다.

 

for문을 하나로 줄여보도록 한다.

 

answer를 다 만들고 빼지말고 해당사항 있는 것만 answer에 추가한다.

import java.util.*;
class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> answer = new ArrayList();
        for(int i = 1 ; i < nums.length+1 ; i++){
            boolean isHere = false;
            for(int j = 0 ; j < nums.length ; j++){
                if(i == nums[j]){
                    isHere = true;
                }
            }
            if(isHere == false){
                answer.add(i);
            }
        }
        return answer;
    }
}

Time Limit Exceed 뜬다.

 

n만큼 줄여봤자 크게 다르지 않으니까 당연하지 멍청아 n^2 + n 에서 n 없앤다고 될 줄알았냐

 

오케이!

 

O(n)안에 하려면 nums 한번 loop 돌때 answer 가 완성되야 한다. 적어도 2중 루프는 없애야 되는데

 

개발 잘하시는 형이 Hash에 element가 있는지 없는지는 O(1)이라고 알려주셨다.
하핫 자료구조 다시봐야지

special thanks to https://velog.io/@ehdrms2034

 

ehdrms2034 (600g (Kim Dong Geun)) - velog

Access Token 저장 위치에 대한 고찰 항상 백엔드 프레임워크를 배우면 책을 한 권 다 본 뒤에 관습적으로 하는 것이 있다.바로 로그인 모듈을 직접 만들어보는 것이다.실제로 로그인 모듈을 만들어보는 것 만큼 해당 프레임워크를 이해하기 좋은게 없다 생각한다.DB, Cookie, Token 심지어 Redis등 2020년 3월 22일 · 5개의 댓글

velog.io

 

hashmap 써서 구현하니까 통과는 된다.

import java.util.*;
class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        HashMap <Integer,Integer> map = new HashMap<>();
        List<Integer> answer = new ArrayList();
     
        for(int i = 0 ; i < nums.length ; i++){
            map.put(nums[i],nums[i]);
        }
        for(int i = 1; i < nums.length+1 ; i++){
            if(map.containsKey(i) == false){
                answer.add(i);
            }
        }
        
        return answer;
    }
}

Success

Details 

Runtime: 19 ms, faster than 17.73% of Java online submissions for Find All Numbers Disappeared in an Array.

Memory Usage: 49.4 MB, less than 32.08% of Java online submissions for Find All Numbers Disappeared in an Array.

 


728x90

'Algorithm > LeetCode' 카테고리의 다른 글

Leetcode - 2. Add Two Sum  (0) 2020.05.25
Leetcode - 557. Reverse Words in a String III  (0) 2020.04.29
Leetcode - 226 . Invert Binary Tree  (0) 2020.04.20
Leetcode - 205. Isomorphic Strings  (1) 2020.04.17
Leetcode - 189 . Rotate Array  (0) 2020.04.14

댓글