은 무엇 a
목록에 2 회, b
한 번 c
2 번 존재 함을 인식 할 수있는 가장 효율적인 방법이 될 것입니다 (C, A, A, B, C) 무언가의 정렬 된 목록을 감안할 때?
명백한 계산지도와는 별도로. 이 일을 더 잘할 수 있을까요?
궁극적으로 목표는 목록을 반복하고 임의의 특정 시점에서 키가 몇 번 있었는지 알기위한 것입니다. 지도에 물건을 넣는 것은 우리가 실제로 필요로하지 않는 단계처럼 보입니다.
은 무엇 a
목록에 2 회, b
한 번 c
2 번 존재 함을 인식 할 수있는 가장 효율적인 방법이 될 것입니다 (C, A, A, B, C) 무언가의 정렬 된 목록을 감안할 때?
명백한 계산지도와는 별도로. 이 일을 더 잘할 수 있을까요?
궁극적으로 목표는 목록을 반복하고 임의의 특정 시점에서 키가 몇 번 있었는지 알기위한 것입니다. 지도에 물건을 넣는 것은 우리가 실제로 필요로하지 않는 단계처럼 보입니다.
현재 요소를 이전 요소로 변경하고, 동일한 경우 개수를 증가시키고, 그렇지 않으면 계수를 넣습니다 (그리고 카운터를 1로 재설정).
그러나 알고리즘을 유지하더라도 get을 사용하여 결과를 null과 비교하면 불필요한 조회를 피할 수 있습니다.
Multiset
구현을 Guava (아마도 HashMultiset
)에 사용합니다. 각 반복마다 put
/get
을 수행하지 않아도됩니다. 추가 할 때 이미 항목이있는 경우 카운트가 증가합니다. HashMap<Foo, AtomicInteger>
을 사용하는 것과 조금 비슷합니다.
자세한 내용은 Guava User's Guide entry on Multiset
을 참조하십시오.
제안대로 모든 단계를 수동으로 작성했습니다. 최고의 실적 수치를 얻었습니다. – JAM