432. 올오원 데이터 구조
난이도:어려움
주제: 해시 테이블, 연결 목록, 디자인, 이중 연결 목록
최소 및 최대 개수로 문자열을 반환하는 기능을 사용하여 문자열 개수를 저장하는 데이터 구조를 설계합니다.
AllOne 클래스 구현:
참고 각 함수는 O(1) 평균 시간 복잡도에서 실행되어야 합니다.
예 1:
제약조건:
해결책:
상수 시간(O(1))에서 최소 및 최대 개수로 키를 증가, 감소 및 검색할 수 있는 데이터 구조를 구현해야 합니다.
해시 테이블(문자열 개수용):
각 문자열(키)을 해당 개수에 매핑하는 해시 테이블(개수)이 필요합니다. 이를 통해 개수를 늘리거나 줄일 때 O(1) 액세스가 가능합니다.
이중 연결 목록(개수용):
최소 및 최대 개수를 추적하기 위해 각 노드가 고유한 개수를 나타내는 이중 연결 목록을 사용할 수 있습니다. 노드는 해당 개수의 모든 문자열을 세트에 저장합니다. 연결된 목록은 헤드(최소) 및 테일(최대) 노드를 추적하여 일정한 시간에 최소 및 최대 개수를 검색하는 데 도움이 됩니다.
두 개의 해시 맵:
inc(키):
dec(키):
getMaxKey() 및 getMinKey():
이 솔루션을 PHP로 구현해 보겠습니다. 432. 올오원 데이터 구조
inc($key); * $obj->dec($key); * $ret_3 = $obj->getMaxKey(); * $ret_4 = $obj->getMinKey(); */ // Example usage $allOne = new AllOne(); $allOne->inc("hello"); $allOne->inc("hello"); echo $allOne->getMaxKey(); // returns "hello" echo $allOne->getMinKey(); // returns "hello" $allOne->inc("leet"); echo $allOne->getMaxKey(); // returns "hello" echo $allOne->getMinKey(); // returns "leet" ?>설명:
데이터 구조:
- key_to_node: 각 키를 이중 연결 목록의 해당 노드에 매핑합니다.
- counts: 각 개수를 이중 연결 목록의 해당 노드에 매핑합니다.
- 머리와 꼬리: 이중 연결 목록을 더 쉽게 조작하기 위한 더미 머리와 꼬리 노드.
방법:
- inc($key): 키가 존재하면 개수를 증가시키고 목록의 적절한 노드로 이동합니다. 그렇지 않은 경우 1번째로 삽입합니다.
- dec($key): 키 개수를 줄이고 키를 제거하거나 적절한 노드로 이동합니다.
- getMaxKey(): 이중 연결 목록(최대 개수)의 끝 부분에 있는 노드에서 키를 반환합니다.
- getMinKey(): 이중 연결 리스트(최소 개수)의 선두에 있는 노드에서 키를 반환합니다.
복잡성:
추가 설명이 필요하면 알려주세요!
연락처 링크
이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!
이런 유용한 콘텐츠를 더 원하시면 저를 팔로우해주세요.
위 내용은 . 올오원 데이터 구조의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!