본문 바로가기
Algorithm/LeetCode

[448]Find All Numbers Disappeared in an Array

by BAYABA 2020. 9. 18.

 

leetcode.com/problems/find-all-numbers-disappeared-in-an-array/


다음 출처를 참고하여 해결하였습니다.

ergate.tistory.com/entry/LeetCode-448-Find-All-Numbers-Disappeared-in-an-Array

 

중요한 성질 두 가지를 기억하면 됩니다.

 

N: 배열의 길이

1. 배열 내의 값이 [0,N-1] 또는 [1,N] 범위 내로 주어진다면 이를 인덱스로 활용할 가능성이 높습니다.

2. 중복유무와 관계없이 한 번이라도 등장한 값과 등장하지 않은 값의 차이는 인덱스상에 표시할 수 있습니다.

 

위 1, 2번 성질을 활용하여  한 번이라도 등장한 숫자는 number는 arr[number-1] 숫자를 음수로 바꿔줍니다.

 

중복 방문하지 않도록 하여 2번 등장한 숫자의 arr[number-1]이 양수가 되지 않게 합니다.

 

이렇게 바꿔버린 뒤에 아직 arr[] 원소값이 양수라면 이 인덱스는 등장하지 않은 숫자임을 알 수 있습니다.


public List<Integer> findDisappearedNumbers(int[] nums) {

    List<Integer> duplicatedNumbers = new ArrayList<>();

    for (int i = 0; i < nums.length; ++i)
    {
        int idx = Math.abs(nums[i]);

        if (nums[idx-1] > 0)
        {
            nums[idx-1] = -nums[idx-1];
        }
    }

    for (int i = 0; i < nums.length; ++i)
    {
        if (nums[i] > 0)
        {
        duplicatedNumbers.add(i + 1);
        }
    }

    return duplicatedNumbers;
}

 

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

[169]Majority Element  (0) 2020.09.18
[136]SingleNumber  (0) 2020.09.18
[009]Detect Capital  (0) 2020.08.08
[008]Find All Duplicates in an Array  (0) 2020.08.07
[007]Add and Search Word - Data structure design  (0) 2020.08.06