2014-12-09 2 views
1

Array2의 Array1을 찾는 코드 조각을 순서에 관계없이 작성하려면 어떻게해야합니까? 예 :C# - Array2 Array1이 포함 된 배열을 포함합니다.

Array1: { 2,5,6,6,3 } 
Array2: { 1,2,3,4,5,6,6 } 
will return true 


Array1: { 2,5,6,6,3 } 
Array2: { 1,2,3,4,5,6 } 
will return false 

나는 일종의 myslef를 해결하고 싶다. 나는 어떤 방향으로 향하게해야한다.

미리 감사드립니다. 당신은 단지 힌트보다는 코드를 원하기 때문에

+2

나는 당신의 논리를 잘 모르겠다. 첫 번째 예제는 포함되어있는 것처럼 보입니다. 중복 된 내용을 무시하면 다른 예제가 될 수 있습니다. – BradleyDotNET

+0

"중복을 염두에 두라"는 것이 정확히 무엇을 의미합니까? –

+0

고정 된 문구. Array1에 요소가 더 포함되어 있으면 true를 반환하는 데 적어도 그 횟수만큼 찾아야한다는 것을 의미합니다. 편집 : 또한 true/false 스왑 된 고정. 내 잘못. – HajdaCZ

답변

0

음, 한 가지 방법은 다음과 같습니다

  1. 복사 array2List<int>에.

  2. Sort it.

  3. 목록의 크기와 동일한 used이라고하는 bit array을 할당하십시오. 이것들은, 소트리스트의 특정의 아이템이 일치로 사용되었는지 어떤지를 나타내는 플래그입니다. array1의 각 항목 item를 들어

  4. :

    4.1 Binary searchitem의 정렬 된 목록.

    4.2. 찾을 수 없으면 false를 반환하십시오. array2에는 array1이 포함되지 않습니다.

    4.3. 발견되면, 중복이 존재할 때, 2 진 검색 알고리즘은 중복 중 하나의 색인을 무작위로 반환합니다. 목록의 일부에서 item과 일치하는 부분을 뒤로 검색하여 used[i]이 거짓 일 때까지 찾습니다. 찾은 경우 used[i]을 true로 설정하고 바깥 쪽 루프를 계속합니다. 하나도 찾지 못하면 초기 이진 검색 색인에서 앞으로 스캔하여 사용하지 않은 일치 항목을 찾습니다. 마찬가지로 used[index]이 발견되면 true로 설정하고 array1을 통해 계속 반복합니다.

    4.4 사용되지 않는 일치 항목이 없으면 array2array1이 포함되지 않은 false를 반환합니다.

  5. 는, true를 돌려 array1의 각 항목에 대한 사용하지 않는 일치를 발견 갖는 array1array2 내부에 포함되어 있습니다.

이 알고리즘의 장점, 당신은 배열마다 시간을 다시 정렬 할 필요가 없습니다 주어진 배열에 포함 된 여러 배열을 확인하는 것입니다, 당신은 단지 BitArray를 다시 할당해야 .

관련 문제