LeetCode 88 Merge Sorted Array(合并排序数组)(*)
2016-01-24 12:06
471 查看
翻译
[code]给定两个排序的整型数组nums1和nums2,将nums2合并到nums1成一个排序数组。 批注: 你可以假设nums1中有足够的空间(空间大于或等于m+n)来存放来自nums2的额外元素。 nums1和nums2的初始空间分别是m和n。
原文
[code]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中的数据按大小逐个添加到这个新数组中,最后将这个数组整个赋值给nums1,不过像是作弊一样,题意说了是要并到nums1中的,这样一来nums1并没有变化。所以,继续想新的方法……
先来理一理,有如下这些关系:
[code]1,m和n表示的是nums1和nums2中已经初始化的元素数量, 而并非nums1和nums2的空间大小,也就是说nums1中空间足够大, 但其中m个空间设置了该设的值,我们在本题中称它为有效数目 2,由1得出合并后的总的有效数目为m+n 3,因为都是从0开始,所以nums1和nums2的最后一个元素的索引分别是m-1和n-1, 合并后的nums1的最后一个元素的索引应该是m+n-1 4,我们是将nums2并入nums1,所以整体的循环可以从nums2开始 5,下面我会阐述为什么内部的循环要从nums1的尾部开始: 因为这是vector数组而不是链表,它们是有索引的,索引是从前到后的(从0到m-1) 如果在数组前方添加一个数字,那么其后的所有元素都需要往后挪一步 而如果在后方添加一个数字,前面的则不需要移动。 至于为什么不担心后方空间问题,因为题目说了给nums1的空间足够大。
原谅我没有再给数组画竖线以区分每个格子,相信大家都懂的,我已经尽力了,哈哈……
看代码……
代码
[code]class Solution { public: void merge(vector<int> &nums1, int m, vector<int> &nums2, int n) { int i = m - 1, j = n - 1, position = m + n - 1; while (j >= 0) { nums1[position--] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--]; } } };
相关文章推荐
- jQuery form插件的使用--使用 fieldValue 方法校验表单
- 关于 Mac OS 本地安装 Mysql 的一些坑
- How to Set and Unset Local, User and System Wide Environment Variables in Linux
- Geekband第二周 1.2
- 告诉你Hadoop是什么【图解】
- 第一次作业
- (入门)uva 227 Puzzle
- Python--逻辑/循环/异常/编码
- java文件操作案例
- 5-8 UVA 230 Borrowers图书管理系统
- Leetcode 6. ZigZag Conversion
- Android模拟文件上传---------------找不到错误
- YTU 1012: A MST Problem
- Father Christmas flymouse--POJ3160Tarjan
- 【分享】性能比肩美拍秒拍的Android视频录制编辑特效解决方案
- 在Microsoft-IIS/10.0上面部署mvc站点的时候,出现404的错误
- Father Christmas flymouse--POJ3160Tarjan
- 关于自定义函数与静态库中函数重名不报错问题的解决
- 视频格式转化(将MP4格式转换成ogg格式)
- HDU 5614 Baby Ming and Matrix tree(树链剖分+线段树)