Leetcode - Merge Sorted Array
2016-04-18 16:49
393 查看
Question
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.JavaCode
//版本一: 归并排序,从小下标开始遍历两个数组,结果暂存在一个新数组中 public void merge(int[] nums1, int m, int[] nums2, int n) { int i=0; int j=0; int k=0; int[] nums = new int[m + n]; while(i < m && j < n) { if(nums1[i] < nums2[j]) nums[k++] = nums1[i++]; else if(nums1[i] > nums2[j]) nums[k++] = nums2[j++]; else { nums[k++] = nums1[i++]; nums[k++] = nums2[j++]; } } //拷贝两个数组中可能剩余的有序元素 // while(i < m) { nums[k++] = nums1[i++]; } // while(j < n) { nums[k++] = nums2[j++]; } if(i < m) System.arraycopy(nums1, i, nums, k, m-i); if(j < n) System.arraycopy(nums2, j, nums, k, n-j); System.arraycopy(nums, 0, nums1, 0, m+n); } //版本二: 归并排序,从大下标开始遍历两个数组,结果可直接保存在nums1数组中 public void merge(int[] nums1, int m, int[] nums2, int n) { if(n == 0) return; if(m == 0) { System.arraycopy(nums2, 0, nums1, 0, n); return; } int k = m+n-1; m--; n--; while(m >= 0 && n >= 0) { if(nums1[m] > nums2 ) nums1[k--] = nums1[m--]; else if(nums1[m] < nums2 ) nums1[k--] = nums2[n--]; else { nums1[k--] = nums1[m--]; nums1[k--] = nums2[n--]; } } //拷贝nums2中可能剩余的有序元素 //while(n >= 0) { nums1 = nums2 ; n--;} System.arraycopy(nums2, 0, nums1, 0, n+1); }
说明
本题中给出的两个方法大同小异,都使用了归并排序,但是版本二的方式无需使用额外的空间,可以避免不必要的数组拷贝,时间复杂度为O(n)。相关文章推荐
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- javascript数组操作总结和属性、方法介绍
- mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
- JavaScript Array扩展实现代码
- JavaScript之数组(Array)详解
- Javascript实现Array和String互转换的方法
- C#中Array与ArrayList用法及转换的方法
- Array栈方法和队列方法的特点说明
- Array.prototype.slice 使用扩展
- Array, Array Constructor, for in loop, typeof, instanceOf
- 实例详解ECMAScript5中新增的Array方法
- Javascript数组Array基础介绍
- js Array的用法总结
- JavaScript 判断判断某个对象是Object还是一个Array
- Javascript中的Array数组对象详谈
- js模拟实现Array的sort方法
- java实现归并排序算法
- 在javascript将NodeList作为Array数组处理的方法
- PHP array_multisort()函数的使用札记
- PHP中array_merge和array相加的区别分析