高洛峰2017-04-18 09:36:30
저는 실제로 이 질문을 한 것이 아닙니다. 저는 그가 의미하는 바를 추측하여 다음 코드를 작성했습니다. 읽고 나면 문제를 이해해야 합니다.
결과:
으아악이 질문은 Python에는 그다지 적합하지 않습니다(leetcode의 많은 데이터 구조 질문에는 이 문제가 있습니다). 원래 질문은 배열에 대해 이야기하지만 여기서 다루는 것은 목록입니다. Python의 목록은 실제로 배열과 더 유사합니다. 아직은 약간의 차이가 있습니다.
제목에서 알 수 있듯이 nums1
의 길이는 m+n
부터 시작됩니다. 이는 불분명한 이유 때문일 수 있습니다. m
는 m+n
의 길이를 나타냅니다. nums1
( 공백)이므로 제 예에서는 의미 없는 숫자를 나타내지만 공백의 존재를 강조하기 위해 0을 사용했습니다.
첫 번째 방법 nums1[m:] = nums2[:n]
은 nums2
의 처음 n개 요소(유효 요소)를 nums1
공간의 후반부(m+1
번째 위치부터)에 채우고, 마지막으로 최종 답변이 우리가 원하는 것이 되도록 정렬하세요.
두 번째 방법은 언뜻 보면 첫 번째 방법과 동일해 보이지만, 이 질문에 사용될 수 있는 입력 데이터의 측면에서는 실제로는 nums1
이후 남은 공간을 사용하지 않게 됩니다. nums2
의 각 요소는 append
을 사용하여 새로운 공백을 추가하므로 nums1
의 길이(공백)가 변경됩니다.
이 접근 방식의 문제점은 두 번째 접근 방식과 동일하지만 더 심각한 것은 nums1 + nums2
이 변경 사항이 최종적으로 nums1
에 할당되어 있지 않기 때문에 새로운 개체를 생성한다는 것입니다. , 이 변수는 더 이상 원본 nums1
을 참조하지 않으며, 원본 nums1
은 전혀 영향을 받지 않습니다.
질문을 정확하게 이해하시고 궁금증을 해소하시길 바랍니다!
내가 답변한 질문: Python-QA
高洛峰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 항목을 병합하는 것입니다. 다른 목록을 새 목록으로 정렬하고, 질문의 의미는 분명히 두 목록을 병합하는 것입니다. 囧