Leetcode 合并有序数组 Merge 2 arrays in 1 array

来源:互联网 发布:php api接口开发规范 编辑:程序博客网 时间:2024/06/08 02:53

《进军硅谷》原题:合并有序数组

给定两个有序数组A和B, 合并B到A, 结果保持有序。假设A有足够空间容纳B。初始时,A、B元素各有m和n个;

Leetcode:    https://leetcode.com/problems/merge-sorted-array/


分析:

数组插入新元素没有链表那么方便,因为插入一个新元素会导致插入后的所有元素的移动,为了避免移动,通常从后向前插入,即反向插入;


思路:

1 找到原有数组A和B的最后一个元素;
2 逐个把较大的值放在A数组的m+n-1位置向前。
3 一定要先画图,再写代码;注意边界条件!

public void Merge(int[] nums1, int m, int[] nums2, int n)        {            //边界条件            if (n == 0) return;            if (m == 0) //返回所有的nums2到nums1中                while (n > 0)                {                    nums1[n - 1] = nums2[n - 1];                    n--;                }            int i = m - 1;            int j = n - 1;            int k = m + n - 1;            while (i >= 0 || j >= 0)            {                if (i < 0 && j >= 0)                {                    nums1[k] = nums2[j];                    j--;                }                else if (i >= 0 && j < 0)                {                    //do nothing                    i--;                }                else                {                    if (nums1[i] >= nums2[j])                    {                        nums1[k] = nums1[i];                        i--;                    }                    else if (nums1[i] < nums2[j])                    {                        nums1[k] = nums2[j];                        j--;                    }                }                k--;            }        }



0 0
原创粉丝点击