찾다

 >  Q&A  >  본문

python - 88. Merge Sorted Array

天蓬老师天蓬老师2768일 전865

모든 응답(2)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-18 09:36:30

    저는 실제로 이 질문을 한 것이 아닙니다. 저는 그가 의미하는 바를 추측하여 다음 코드를 작성했습니다. 읽고 나면 문제를 이해해야 합니다.

    간단한 테스트

    으아악

    결과:

    으아악

    설명

    이 질문은 Python에는 그다지 적합하지 않습니다(leetcode의 많은 데이터 구조 질문에는 이 문제가 있습니다). 원래 질문은 배열에 대해 이야기하지만 여기서 다루는 것은 목록입니다. Python의 목록은 실제로 배열과 더 유사합니다. 아직은 약간의 차이가 있습니다.

    제목에서 알 수 있듯이 nums1의 길이는 m+n부터 시작됩니다. 이는 불분명한 이유 때문일 수 있습니다. mm+n의 길이를 나타냅니다. nums1 ( 공백)이므로 제 예에서는 의미 없는 숫자를 나타내지만 공백의 존재를 강조하기 위해 0을 사용했습니다.

    병합1

    첫 번째 방법 nums1[m:] = nums2[:n]nums2의 처음 n개 요소(유효 요소)를 nums1 공간의 후반부(m+1번째 위치부터)에 채우고, 마지막으로 최종 답변이 우리가 원하는 것이 되도록 정렬하세요.

    병합2

    두 번째 방법은 언뜻 보면 첫 번째 방법과 동일해 보이지만, 이 질문에 사용될 수 있는 입력 데이터의 측면에서는 실제로는 nums1 이후 남은 공간을 사용하지 않게 됩니다. nums2의 각 요소는 append을 사용하여 새로운 공백을 추가하므로 nums1의 길이(공백)가 변경됩니다.

    병합3

    이 접근 방식의 문제점은 두 번째 접근 방식과 동일하지만 더 심각한 것은 nums1 + nums2이 변경 사항이 최종적으로 nums1에 할당되어 있지 않기 때문에 새로운 개체를 생성한다는 것입니다. , 이 변수는 더 이상 원본 nums1을 참조하지 않으며, 원본 nums1은 전혀 영향을 받지 않습니다.

    질문을 정확하게 이해하시고 궁금증을 해소하시길 바랍니다!


    내가 답변한 질문: Python-QA

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-18 09:36:30

    질문의 의미를 잘못 이해하셨을 수도 있습니다

    You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.

    이 프롬프트는 len(nums1) >= m + n을 의미합니다. 특히 nums1의 첫 번째 m 항목과 nums2의 마지막 n 항목을 새 배열(목록)로 병합하고 정렬해야 합니다(nums1의 요소 수 m + n)

    그래서 당신의 해결책은 정말 틀렸습니다

    PS: 제가 영어가 서툴러서인지 원래 이 질문을 한 외국인이 좀 불분명한지는 잘 모르겠습니다. 표준 답변의 의도는 한 목록의 첫 번째 m 항목과 마지막 n 항목을 병합하는 것입니다. 다른 목록을 새 목록으로 정렬하고, 질문의 의미는 분명히 두 목록을 병합하는 것입니다. 囧

    회신하다
    0
  • 취소회신하다