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

Note:

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

Example:

  1. Input:
  2. nums1 = [1,2,3,0,0,0], m = 3
  3. nums2 = [2,5,6], n = 3
  4.  
  5. Output: [1,2,2,3,5,6]

给两个有序的数组 A 和 B,把 B 合并到 A,变成一个数组,假定 A 有足够的空间。

可以考虑新建立一个m + n的数组,然后从两个数组的开头取各取一个元素进行比较,把小的放进新数组,然后在循环这个过程,直到结束。

好的方法是不用新建立数组,而是直接在A 数组上写入,因为 A 足够大,可从两个数组的最大数也就是最后一个数开始比较,大的写入A[m + n -1],然后循环这个过程。如果 B 的元素写完了,A 剩下的元素正好在正取的位置,不用写了。如果 A 的元素都取完了,那剩下的 B 的元素可一次全部写进 A。

Java:

  1. public class Solution {
  2. public void merge(int A[], int m, int B[], int n) {
  3.  
  4. while(m > 0 && n > 0){
  5. if(A[m-1] > B[n-1]){
  6. A[m+n-1] = A[m-1];
  7. m--;
  8. }else{
  9. A[m+n-1] = B[n-1];
  10. n--;
  11. }
  12. }
  13.  
  14. while(n > 0){
  15. A[m+n-1] = B[n-1];
  16. n--;
  17. }
  18. }
  19. }

Java:

  1. public void merge(int A[], int m, int B[], int n) {
  2. int i = m - 1;
  3. int j = n - 1;
  4. int k = m + n - 1;
  5.  
  6. while (k >= 0) {
  7. if (j < 0 || (i >= 0 && A[i] > B[j]))
  8. A[k--] = A[i--];
  9. else
  10. A[k--] = B[j--];
  11. }
  12. }

Python:

  1. class Solution:
  2. # @param A a list of integers
  3. # @param m an integer, length of A
  4. # @param B a list of integers
  5. # @param n an integer, length of B
  6. # @return nothing
  7. def merge(self, A, m, B, n):
  8. last, i, j = m + n - 1, m - 1, n - 1
  9.  
  10. while i >= 0 and j >= 0:
  11. if A[i] > B[j]:
  12. A[last] = A[i]
  13. last, i = last - 1, i - 1
  14. else:
  15. A[last] = B[j]
  16. last, j = last - 1, j - 1
  17.  
  18. while j >= 0:
  19. A[last] = B[j]
  20. last, j = last - 1, j - 1
  21.  
  22. if __name__ == "__main__":
  23. A = [1, 3, 5, 0, 0, 0, 0]
  24. B = [2, 4, 6, 7]
  25. Solution().merge(A, 3, B, 4)
  26. print(A)

  

Python:

  1. class Solution:
  2. def merge(self, nums1, m, nums2, n):
  3. """
  4. :type nums1: List[int]
  5. :type m: int
  6. :type nums2: List[int]
  7. :type n: int
  8. :rtype: void Do not return anything, modify nums1 in-place instead.
  9. """
  10. while m > 0 and n > 0:
  11. if nums1[m-1] > nums2[n-1]:
  12. nums1[m+n-1] = nums1[m-1]
  13. m -= 1
  14. else:
  15. nums1[m+n-1] = nums2[n-1]
  16. n -= 1
  17. if n > 0:
  18. nums1[:n] = nums2[:n]

C++:

  1. class Solution {
  2. public:
  3. void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
  4. int i = m + n;
  5. while (m > 0 && n > 0) {
  6. if (nums1[m - 1] > nums2[n - 1]) {
  7. nums1[i - 1] = nums1[m - 1];
  8. --m;
  9. } else {
  10. nums1[i - 1] = nums2[n - 1];
  11. --n;
  12. }
  13. --i;
  14. }
  15.  
  16. while (n > 0) {
  17. nums1[i - 1] = nums2[n - 1];
  18. --n;
  19. --i;
  20. }
  21. }
  22. };

 

类似题目:

[LeetCode] 21. Merge Two Sorted Lists 合并有序链表

[LeetCode] 23. Merge k Sorted Lists 合并k个有序链表

All LeetCode Questions List 题目汇总

[LeetCode] 88. Merge Sorted Array 合并有序数组的更多相关文章

  1. [leetcode]88. Merge Sorted Array归并有序数组

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

  2. Leetcode#88. Merge Sorted Array(合并两个有序数组)

    题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

  3. [LeetCode] 88. Merge Sorted Array 混合插入有序数组

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

  4. Leetcode 88 Merge Sorted Array STL

    合并有序数组 时间复杂度O(m+n) 该算法来自各种算法与数据结构书,写得已经烂得不能再烂了,这个应该是最短的代码了吧,不知如何归类 class Solution { public: void mer ...

  5. LeetCode 88. Merge Sorted Array(合并有序数组)

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

  6. 【LeetCode】Merge Sorted Array(合并两个有序数组)

    这道题是LeetCode里的第88道题. 题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nu ...

  7. LeetCode 088 Merge Sorted Array 合并两个有序数组

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

  8. leetCode 88.Merge Sorted Array (合并排序数组) 解题思路和方法

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

  9. LeetCode 88 Merge Sorted Array

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

随机推荐

  1. mybatis配置打印sql

    mybatis配置打印sql: <settings> <setting name="logImpl" value="STDOUT_LOGGING&quo ...

  2. vue中引入.svg图标,使用iconfont图标库

    阿里巴巴的iconfont是一个很好的图标库,海量的素材可以快速满足开发人员日常对图标的诉求,我们采用symbol引用,官方介绍 创建SvgIcon组件 <template> <sv ...

  3. 最新NetMonitor代码

    <Window x:Class="NetMonitor.MainWindow" xmlns="http://schemas.microsoft.com/winfx/ ...

  4. Nginx——报错汇总

    前言 记录NGINX的错误 错误 nginx: [emerg] unknown directive "erver" in /usr/local/nginx/conf/vhost/d ...

  5. modbus-poll和modbus-slave工具的学习使用——环境搭建

    在modbus的学习工具中,非modbus-poll和modbus-slave莫属了,在电脑上模拟的过程中,两者缺一不可 ,当然还需要虚拟串口工具:Configure Virtual Serial P ...

  6. php+tcpdf如何把生成的pdf文件保存在服务端

    tcpdf组件目前应用得非常广泛,但是对于如何把生成的pdf文件自动保存在服务端却很少有人提及.让我们先来看看标准输出代码:   //服务器存档模式 $pdf->Output('output.p ...

  7. selenium原理解析

    相信很多测试小伙伴儿都听过或者使用过web自动化selenium,那您有没有研究过selenium的原理呢?为什么要使用webdriver.exe,webdriver.exe是干啥用的?seleniu ...

  8. OLED液晶屏幕(1)OLED液晶屏幕ssd1306驱动芯片 arduino运行 ESP8266-07可以 12f不可以

    OLED屏幕有各种形状和尺寸,但目前有两种非常受欢迎的屏幕尺寸. 1)0.96“ 2)1.3“ 他们也有2种常见的颜色 1)蓝色 2)白色 驱动OLED的芯片常用的有两种.这两种芯片有许多非常相似的设 ...

  9. LeetCode 1027. Longest Arithmetic Sequence

    原题链接在这里:https://leetcode.com/problems/longest-arithmetic-sequence/ 题目: Given an array A of integers, ...

  10. 利用Python进行数据分析【第二版】【高清中文版英文版源代码】

    如果被河蟹请回复我更新链接   这是我花钱弄的,免费分享给大家.没有密码,直接可以观看!   希望大家不要拿去后再做收费分享   如果好用,请给个赞好嘛~~~   1.中文pdf 链接:https:/ ...