leetcode 88 Merge Sorted Array

題目詳情

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
題目的意思是,輸入兩個已經排好序的數組nums1和nums2,要根據順序把nums2種的元素併入nums1數組中。其中,nums1數組的待排序元素數量爲m,nums2數組的待排序元素數量爲n。題目假設nums1數組的長度大於須要排序的元素數量(數組的後n位爲0)。

解法

  • 看到這道題時一種常規思路多是,從頭遍歷兩個數組,將nums2的元素插入到nums1的合適的位置。可是在這道題裏,數組的插入會致使大量的工做量。
  • 同時咱們注意到,nums1數組的後n個位置都是能夠被利用的,同時對於這些位置元素的改變並不會影響nums1數組前面待排序的元素。
  • 因此咱們從最大的待排序元素進行判斷,將最大的元素賦值給nums1的最後一個元素...以此類推
  • 若是nums1的元素所有排序完畢,nums2的元素還有剩餘,那麼咱們要將nums2數組剩下的元素插入nums1數組中。若是nums2數組先被排序完畢,那麼就直接獲得了最後的結果。
public void merge(int[] nums1, int m, int[] nums2, int n) {
        
        int i = m-1;
        int j = n-1;
        int k = m+n-1 ;
        
        while(i >= 0 && j >= 0 ){            
            if(nums1[i] > nums2[j]){
                nums1[k--] = nums1[i--];
            }else{
                nums1[k--] = nums2[j--];
            }
        }
        
        while(j >= 0){
            nums1[k--] = nums2[j--];
        }
        
        
    }

這道題的描述不是很清晰,若是理解了,想法仍是比較簡單的~數組

相關文章
相關標籤/搜索