1. Merge two given sorted integer array A and B into a new sorted integer array.
  2.  
  3. Example
  4. A=[1,2,3,4]
  5.  
  6. B=[2,4,5,6]
  7.  
  8. return [1,2,2,3,4,4,5,6]
  9.  
  10. Challenge
  11. How can you optimize your algorithm
  12. if one array is very large and the other is very small?

此题要求返回新数组。由于可以生成新数组,故使用常规思路按顺序遍历即可。

C++:

  1. class Solution {
  2. public:
  3. /**
  4. * @param A and B: sorted integer array A and B.
  5. * @return: A new sorted integer array
  6. */
  7. vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
  8. if (A.empty()) return B;
  9. if (B.empty()) return A;
  10.  
  11. int aLen = A.size(), bLen = B.size();
  12. vector<int> C;
  13. int i = , j = ;
  14. while (i < aLen && j < bLen) {
  15. if (A[i] < B[j]) {
  16. C.push_back(A[i]);
  17. ++i;
  18. } else {
  19. C.push_back(B[j]);
  20. ++j;
  21. }
  22. }
  23.  
  24. // A has elements left
  25. while (i < aLen) {
  26. C.push_back(A[i]);
  27. ++i;
  28. }
  29.  
  30. // B has elements left
  31. while (j < bLen) {
  32. C.push_back(B[j]);
  33. ++j;
  34. }
  35.  
  36. return C;
  37. }
  38. };

JAVA:

  1. class Solution {
  2. /**
  3. * @param A and B: sorted integer array A and B.
  4. * @return: A new sorted integer array
  5. */
  6. public ArrayList<Integer> mergeSortedArray(ArrayList<Integer> A, ArrayList<Integer> B) {
  7. if (A == null || A.isEmpty()) return B;
  8. if (B == null || B.isEmpty()) return A;
  9.  
  10. ArrayList<Integer> C = new ArrayList<Integer>();
  11. int aLen = A.size(), bLen = B.size();
  12. int i = 0, j = 0;
  13. while (i < aLen && j < bLen) {
  14. if (A.get(i) < B.get(j)) {
  15. C.add(A.get(i));
  16. i++;
  17. } else {
  18. C.add(B.get(j));
  19. j++;
  20. }
  21. }
  22.  
  23. // A has elements left
  24. while (i < aLen) {
  25. C.add(A.get(i));
  26. i++;
  27. }
  28.  
  29. // B has elements left
  30. while (j < bLen) {
  31. C.add(B.get(j));
  32. j++;
  33. }
  34.  
  35. return C;
  36. }
  37. }

源码分析

分三步走,后面分别单独处理剩余的元素。

复杂度分析

遍历 A, B 数组各一次,时间复杂度 O(n), 空间复杂度 O(1).

Challenge

两个倒排列表,一个特别大,一个特别小,如何 Merge?此时应该考虑用一个二分法插入小的,即内存拷贝。

Merge Sorted Array II的更多相关文章

  1. Lintcode: Merge Sorted Array II

    Merge two given sorted integer array A and B into a new sorted integer array. Example A=[1,2,3,4] B= ...

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

    Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...

  3. 【leetcode】Remove Duplicates from Sorted Array II

    Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...

  4. 【leetcode】Search in Rotated Sorted Array II

    Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...

  5. 50. Remove Duplicates from Sorted Array && Remove Duplicates from Sorted Array II && Remove Element

    Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that e ...

  6. 43. Merge Sorted Array && LRU Cache

    Merge Sorted Array OJ: https://oj.leetcode.com/problems/merge-sorted-array/ Given two sorted integer ...

  7. 49. Search in Rotated Sorted Array && Search in Rotated Sorted Array II

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

  8. Java for LeetCode 154 Find Minimum in Rotated Sorted Array II

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  9. [OJ] Find Minimum in Rotated Sorted Array II

    LintCode 160. Find Minimum in Rotated Sorted Array II (Medium) LeetCode 154. Find Minimum in Rotated ...

随机推荐

  1. ubuntu扩展屏幕

    1.了解设置的名称 直接运行xrandr(不带任何参数)就可以显示出当前的显示设备及设备的模式. xdj@xdj-Presario-CQ42-Notebook-PC:~$ xrandr Screen ...

  2. PHP中循环结构之foreach循环语句

    在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标.取下标. (1)只取值,不取下标 <?php foreach (数组 as 值){ //执行的任务 } ?> ...

  3. Python基础-4

    目录 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 1.列表生成式,迭代器&生成器 看列表[0, 1, 2, 3, 4, 5, 6, 7, ...

  4. Java 设计模式 和七大设计原则

    创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类. 生成器模式(Builder pattern): 使 ...

  5. VC维的来龙去脉(转)

    本文转自VC维的来龙去脉 本文为直接复制原文内容,建议阅读原文,原文排版更清晰,且原网站有很多有意思的文章. 阅读总结: 文章几乎为台大林老师网课“机器学习可行性”部分串联总结,是一个很好的总结. H ...

  6. Row_Number() OVER()函数使用举例

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW ...

  7. Python&Django学习系列之-激活管理界面

    1.创建你个人的项目与APP 2.填写你的数据库名称与数据库类型,这里使用内置的sqllite3 3.修改setting文件 a.将'django.contrib.admin'加入setting的IN ...

  8. timer实现Grid自动换行(连续相同的id跳到下一行)

    private { Private declarations } FRow: Integer; procedure SetRow(const Value: Integer); public { Pub ...

  9. Async异步委托

    /// <summary> /// 异步委托 /// </summary> public delegate void AsyncHandler(); public static ...

  10. [转]sessionStorage()和localStorage()的用法

    JS的本地保存localStorage.sessionStorage用法总结: 1. localStorage.sessionStorage是Html5的特性,IE7以下浏览器不支持 为什么要掌握lo ...