의 링크에 의해 가변 배열 병합 :예를 들어, 정수 가변 배열 감안 값
var arr = new int[11][] {
new int[] { 0, 7 },
new int[] { 1 },
new int[] { 2, 5, 6 },
new int[] { 3 },
new int[] { 4 },
new int[] { 5, 6 },
new int[] { 6 },
new int[] { 7, 9 },
new int[] { 8, 10 },
new int[] { 9 },
new int[] { 10 }
};
이 효과적으로 될 수 있는지 항목 1 차원 배열을 생성하도록 평탄화 그들의 위치 및 링크의 순서 그들의 가치 사이. 상기 어레이의 출력은 다음과 같아야
{ 0, 7, 9, 1, 2, 5, 6, 3, 4, 8, 10 }
이 특정 예에서
, { 0, 7 }
및 { 7, 9 }
들은 공통 번호를 가지고 결합 할 것이다 7
그들을 연결. 또한 { 5, 6 }
, { 6 }
등과 같은 복제본은 삭제됩니다.
확실하지 않으면 잘 모르지만 내 머리를 긁적니다. 너무 많이 역 참조하고 여러 중첩 루프를 피할 수 있습니다. 가능한 경우 LINQ/PLINQ 또는 일부를 사용할 수 있습니다. 똑똑한 in-place 문자열 조작. 예
내 결과가 사용자의 서브 어레이의 쌍은 그래프 에지를 형성 DAG (방향성 비순환 그래프)의 topological sorting의 결과로서 발견 될 수도
무엇 '{0, 7}''및 {7, 9하다면 }'와'{7, 10}'은 배열에 존재합니까? – dotctor
비효율적 인 알고리즘이 있습니까? – dotctor
질문이 잘 정의되어 있지 않습니다. 무엇이 일어나야하는지 완전히 명확하지 않은 경우가 너무 많습니다. 귀하의 예제에서 당신은 서브 배열이 "더 짧은"결과를 생성하도록 임의로 재배치 될 수 있음을 암시하는 것처럼 보입니다. 다시 정렬 할 수있는 방법이 여러 개 있다면 어떨까요? 어느 쪽을 골라야합니까? 어떤 약정이 다른 약정보다 짧은 결과를 산출한다면 어떨까요? – Jon