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--];
        }
        
        
    }

这道题的描述不是很清晰,若是理解了,想法仍是比较简单的~数组

相关文章
相关标签/搜索