효율적인 알고리즘 써서 문제 푸는건데요...
-> 부분이 제가 답한겁니다...
봐주시고 더 좋은 방법이 있으시면 알려주세용^^
1. 정수 배열 A가 있는데 이 배열 원소들의 반 이상은 한 숫자이다. 나머지는 unique한 숫자들이다. 예 [4,2,6,5,2,1,2,2,2]
가장 많이 반복되는 이 숫자를 찾아라.
-> 배열 A를 iterate하면서 원소를 해시테이블에 넣고 값으로 (이 원소가 해시테이블에 존재하면? 원소의 값 + 1 : 1) 을 넣는다. 그후 이 해시테이블을 iterate하면서 1이 아닌 것의 원소를 반환
런타임 O(n)
스페이스 O(A의 unique한 숫자들의 개수)
2. 정수 배열 A가 있는데 0에서 A.length까지의 unique 숫자들을 가지고 있다. 물론 여기서 한 숫자가 비어있다. 이 숫자를 찾아라.
예를들어 [3,0,4,1] 에는 2가 비어있다.
-> A.length+1 크기를 가진 boolean 배열 B를 만든다. 그리고 i를 증가시키면서 A를 iterate하면서 B[A[i]] = true로 지정한다. 그후 B를 iterate하면서 false인것의 인덱스를 반환.
런타임 O(n)
스페이스 O(n)
솔직히 둘다 sort해서 inplace로 찾을수도 있는데 위의 방법들은 어떤가요..
피드백좀 주시면 감사..
나쁘지 않네. 2번은 Programming Pearls 1번 에세이자나. 거기는 1비트씩 할당해서 쓰던데 메모리 용량이 크리티컬한 상황이 아니라면 불리언이 낫지.
그리고 2번에서 false인 것의 인덱스는 바이너리 서치로 찾으면 되겄지