【LeetCode】88. Merge Sorted Array

来源:互联网 发布:java工程师具备的条件 编辑:程序博客网 时间:2024/05/29 18:25

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

题意:
两个被排序过整型数组nums1、nums2,将nums2合并到nums1中作为一个已排序的数组。

你可以假定数组nums1有足够的空间(数组的size值是大于等于m+n)去存储来自数组nums2的额外元素。数组nums1、数组nums2的初始化元素的数量分别是m、n。

我的思路:
将数组nums2中的元素合并到数组nums1中,然后在进行排序

我的代码:

class Solution {    public void merge(int[] nums1, int m, int[] nums2, int n) {        for(int r=0; r<n; r++) {            nums1[m+r] = nums2[r];        }        int e = 0; //元素下标        int v = -1;  //元素值        for(int r =m; r < m+n; r++) {            e = r - 1;            v = nums1[r];            while(e>=0 && nums1[e]>v) {                nums1[e+1] = nums1[e];                e--;            }           nums1[++e] = v;        }    }}

网络上提交的

class Solution {    public void merge(int[] nums1, int m, int[] nums2, int n) {        int k = m + n - 1;        int i = m - 1, j = 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--];        }    }}

我的代码在排序时,数组nums2中的每个元素最大需要移动m个元素,而网络上的代码则只需要移动一个元素。

原创粉丝点击