Java 컬렉션 <String username, ArrayList loginTimes>
이 있습니다. 예를 들어, 한 항목은 ["smith", [2012-10-2 08:04:23, 2012-10-4 06:34:21]]
처럼 보일 수 있습니다. 시간에는 1 초의 해상도가 있습니다. 24 시간 이상 떨어져 있지만 7 일 미만 간격으로 적어도 두 번 로그인 한 모든 사용자의 사용자 이름 목록을 출력하려고합니다.비트 배열 및 비트 마스크로 시간 범위 확인
주어진 사용자의 경우 로그인 시간을 다른 모든 로그인 시간과 비교하여 필요한 조건과 일치하는지 확인하는 간단한 O (n^2) 방법이 있습니다. loginTimes를 이진 검색 트리로 저장하는 것과 같은 몇 가지 O (nlogn) 방법이 있으며 각 로그인 시간 (N 개)에 대해 트리 (로그 N)를보고 다른 로그인 시간이 있는지 확인합니다. 요구 사항을 충족시킵니다.
내 이해는 로그인 시간에서 비트 배열 (BitSet)을 만들고 (예 : 필요한 조건을 확인하기 위해 일종의 마스크를 사용하는) 솔루션 (O (n) 이상? 최소 두 번의 로그인 시간이 24 시간 떨어져 있지만 7 일 미만 간격). 아무도 이것이 어떻게 달성 될 수 있었는지 안다? 아니면 가능한 다른 효율적인 솔루션 (O (n) 또는 그 이상)?