LeetCode 88 Merge Sorted Array(合并排序数组)(*)

简介: 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50573259 翻译给定两个排序的整型数组nums1和nums2,将nums2合并到nums1成一个排序数组。
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50573259

翻译

给定两个排序的整型数组nums1和nums2,将nums2合并到nums1成一个排序数组。

批注:
你可以假设nums1中有足够的空间(空间大于或等于m+n)来存放来自nums2的额外元素。
nums1和nums2的初始空间分别是m和n。

原文

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并没有变化。

所以,继续想新的方法……

先来理一理,有如下这些关系:

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的空间足够大。

这里写图片描述

原谅我没有再给数组画竖线以区分每个格子,相信大家都懂的,我已经尽力了,哈哈……

看代码……

代码

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--];
        }
    }
};
目录
相关文章
|
2月前
|
JavaScript 前端开发
总结TypeScript 的一些知识点:TypeScript Array(数组)(下)
一个数组的元素可以是另外一个数组,这样就构成了多维数组(Multi-dimensional Array)。
|
2月前
|
存储 JavaScript 前端开发
总结TypeScript 的一些知识点:TypeScript Array(数组)(上)
数组对象是使用单独的变量名来存储一系列的值。
|
3月前
|
机器学习/深度学习
leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)
leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)
21 0
|
1月前
|
存储 JavaScript
leetcode82. 删除排序链表中的重复元素 II
leetcode82. 删除排序链表中的重复元素 II
22 0
|
1月前
leetcode83. 删除排序链表中的重复元素
leetcode83. 删除排序链表中的重复元素
10 0
|
1月前
|
索引
力扣1859 将句子排序
力扣1859 将句子排序
|
2月前
Google Earth Engine(GEE)——reducer中进行array数组的获取和分析
Google Earth Engine(GEE)——reducer中进行array数组的获取和分析
34 0
|
3月前
|
Rust 索引 Windows
Rust 原始类型之数组array内置方法
Rust 原始类型之数组array内置方法
55 0
Rust 原始类型之数组array内置方法
|
3月前
leetcode:217. 存在重复元素(先排序再比较邻位)
leetcode:217. 存在重复元素(先排序再比较邻位)
16 0
|
3月前
|
算法 测试技术 C#
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II

热门文章

最新文章