>  기사  >  두 개의 2D 목록 알고리즘의 중복을 확인하시겠습니까?

두 개의 2D 목록 알고리즘의 중복을 확인하시겠습니까?

王林
王林앞으로
2024-02-22 13:55:06672검색

PHP 편집자 Baicao는 Java 알고리즘에 대한 멋진 Q&A를 가져왔습니다. 두 개의 2차원 목록에서 중복 요소를 확인하는 방법은 무엇입니까? 이는 많은 Java 프로그래머가 일상적인 개발에서 자주 직면하는 문제 중 하나입니다. 이 기사의 토론과 분석을 통해 독자는 다양한 솔루션과 최적화 전략에 대해 배울 수 있으므로 Java 프로그래밍에서 유사한 문제를 처리하는 방법과 기술을 더 잘 이해하고 숙달할 수 있습니다.

질문 내용

두 개의 목록dc4b5854fa094b5d08a57a86ff781edf>(a와 b라고 함)이 주어졌습니다.

반환: mapdc4b5854fa094b5d08a57a86ff781edf, listdc4b5854fa094b5d08a57a86ff781edf>>

  • a와 b의 항이 a1, a2, a3,...이고 b1, b2, b3...이라고 가정합니다.
  • b1 및 a1 요소(list98c455a79ddfebb79781bff588e7b37e)에서 문자열이 겹치는 항목만 선택하세요
  • 결과에 키 = b1, 값 = a1을 입력하세요.

예시)

으아악

실제로 a와 b의 목록 길이는 최소한 100,000개가 넘을 것입니다. 나는 list.contains를 사용하여 이 접근 방식을 시도했지만 최악의 경우 시간 복잡도는 o(n^3)이었습니다.

여기 내 코드가 있습니다. 이 알고리즘의 시간 복잡도를 o(n^2) 미만으로 줄이고 싶습니다.

define a and b as follows:
a = [a, b, c], [d, e, f], [a, d, f]
b = [a, d], [a], [c], [x]

it returns : 
key        value 
[a,d]    | [a,b,c],[d,e,f],[a,d,f] 
[a]      | [a,b,c],[a,d,f] 
[c]      | [a,b,c] 
[x]      | empty list

해결 방법

이를 o(n^2) 以下,但为了将其减少到 o(n^2),我们可以通过 hashmap 减少 <code>list.contains o(n) .get,即 o(1)시간 복잡성으로 줄이는 방법이 있는지 잘 모르겠습니다.

해당 목록을 contains,而是查找列表 a 中元素的索引,b 元素将获取该索引并获取 a 확인하지 않는 것이 좋습니다.

먼저 map,其中包含 a 요소를 키로, 값을 인덱스로 구성합니다.

으아악

이것은 ainset의 출력입니다. 이제 해당 항목이 속한 요소의 인덱스 목록이 표시됩니다.

으아악

그럼 해당 요소를 b 中元素列表的索引组合起来,得到 a 살펴보겠습니다.

예를 들어 [a, d],我们有一个组合集 [0, 1, 2]. 코드는 다음과 같습니다

으아악

위 내용은 두 개의 2D 목록 알고리즘의 중복을 확인하시겠습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제