题目来源:http://www.lintcode.com/zh-cn/problem/merge-sorted-array-ii/

先贴一个错误的代码,通过了示例,但是没有通过全部案例:

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4
 5 class Solution {
 6 public:
 7     /**
 8      * @param A and B: sorted integer array A and B.
 9      * @return: A new sorted integer array
10      */
11     vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
12         // write your code here
13         vector<int> C(A.size()+B.size());
14         int i,j,k;
15         for(i=0,j=0,k=0;k<A.size()+B.size();k++)
16         {
17             if(i<A.size()&&A.at(i)<=B.at(j))
18             {
19                 C.at(k)=A.at(i);
20                 i++;
21             }
22             else
23                 if(j<B.size())
24                 {
25                     C.at(k)=B.at(j);
26                     j++;
27                 }
28         }
29         return C;
30     }
31 };
32
33 int main()
34 {
35     Solution s;
36     int a[4]={1,2,3,4};
37     int b[4]={2,4,5,6};
38     vector<int> A(a,a+4);
39     vector<int> B(b,b+4);
40     vector<int> C(8);
41     C=s.mergeSortedArray(A,B);
42     for(int i=0;i<C.size();i++)
43         cout<<C.at(i)<<" ";
44 }

这道题类似归并排序中的:将有序的temp[s..m]和temp[m+1..t]归并为有序的TR[s..t]。

注意边界情况。比如1,5,6和2,3,4合并。合并好1,2,3,4,之后还要把5,6复制进来。

 1 //将有序的temp[s..m]和temp[m+1..t]归并为有序的TR[s..t]
 2 void Merge(int temp[],int TR[],int s,int m,int n)
 3 {
 4     int j,k,l;
 5     for(j=m+1,k=s;s<=m && j<=n;k++)//将temp中记录由小到大地并入TR
 6     {
 7         if (temp[s]<temp[j])
 8             TR[k]=temp[s++];
 9         else
10             TR[k]=temp[j++];
11     }
12     if(s<=m)
13     {
14         for(l=0;l<=m-s;l++)
15             TR[k+l]=temp[s+l];//将剩余的temp[s..m]复制到TR
16     }
17     if(j<=n)
18     {
19         for(l=0;l<=n-j;l++)
20             TR[k+l]=temp[j+l];//将剩余的temp[j..n]复制到TR
21     }
22 }

参考上面的代码,可以accept的程序如下:

 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         // write your code here
 9         vector<int> C(A.size()+B.size());
10         int i,j,k;
11         for(i=0,j=0,k=0;i<A.size()&&j<B.size();k++)
12             if(A.at(i)<=B.at(j))
13                 C.at(k)=A.at(i++);
14             else
15                 C.at(k)=B.at(j++);
16         if(i<A.size())
17         {
18             for(int t=0;t<A.size()-i;t++)
19                 C.at(k+t)=A.at(i+t);
20         }
21         if(j<B.size())
22         {
23             for(int t=0;t<B.size()-j;t++)
24                 C.at(k+t)=B.at(j+t);
25         }
26         return C;
27     }
28 };

可以Accept的正确程序2:

 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         vector<int> C;
 9         int i = 0, j = 0;
10         while (i < A.size() && j < B.size()) {
11             if (A[i] < B[j]) {
12                 C.push_back(A[i++]);
13             } else {
14                 C.push_back(B[j++]);
15             }
16         }
17         while (i < A.size()) {
18             C.push_back(A[i++]);
19         }
20         while (j < B.size()) {
21             C.push_back(B[j++]);
22         }
23         return C;
24     }
25 };

转载于:https://www.cnblogs.com/hslzju/p/5447058.html

[容易]合并排序数组相关推荐

  1. LintCode 6.合并排序数组 ||

    import org.junit.Test;import java.util.Arrays;public class MergeSort {/*** @param A: sorted integer ...

  2. lintcode:合并排序数组

    题目: 合并排序数组 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6] 挑战 你能否优化你的算法,如果 ...

  3. 64. 合并排序数组 II

    合并两个排序的整数数组A和B变成一个新的数组. 样例 给出 A = [1, 2, 3, empty, empty], B = [4, 5] 合并之后 A 将变成 [1,2,3,4,5] 看的出来A后面 ...

  4. 九章算法面试题86 合并排序数组

    原文网址 www.jiuzhang.com 问题详情 合并两个排序的整数数组A和B变成一个新的数组. 在线评测本题: http://www.lintcode.com/zh-cn/problem/mer ...

  5. python两个数组合并排序_2、合并排序数组

    1.问题描述 问题描述:合并两个升序的整数数组A和B,形成一个新的数组,新数组也要有序. 2.问题示例 输入A[1],B=[1],输出[1, 1],返回合并后的数组. 输入A=[2, 4, 6, 7] ...

  6. python合并排序数组

    问题描述 合并两个升序的整数列表a和b,形成一个新的列表,新列表也要有序. 问题示例 输入 a = [1,2,3,4] b = [2,4,5,6],输出 [1, 2, 2, 3, 4, 4, 5, 6 ...

  7. [LintCode笔记了解一下]64.合并排序数组

    Given two sorted integer arrays A and B, merge B into A as one sorted array. 思路: 因为A的后面的部分都是空的留出来给我们 ...

  8. 链表节点合并排序:数组和单链表

    每日一贴,今天的内容关键字为链表节点 1 数组合并排序 1.1 合并两个已排序好的数组 需要额定的存储空间用来存储合并结果 //merge two array which are already so ...

  9. 【LeetCode】004 Median of Two Sorted Arrays 两个排序数组合并后的中位数

    题目:LeetCode 004 Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m an ...

最新文章

  1. 基于视觉惯性里程计的无监督深度补全方法
  2. 重排序、hb、ConcurrentHashMap弱一致性(jdk1.6)
  3. mysql 添加时间戳列
  4. 2011/5/18工作笔记
  5. 基于HTML5技术的电力3D监控应用(二)
  6. 用一年的时间,依靠SEO创造一个成功的网站
  7. python控制树莓派相机_玩转树莓派-Raspberry,控制单反相机进行可编程摄影
  8. 谐音梗?小米推出首款短视频应用“朕惊视频”:专为年轻人打造
  9. 基于django的视频点播网站开发-step12-后台订阅功能...
  10. 19-random猜数
  11. PHP裁剪图片且保留背景透明
  12. java+ssh实现级联下拉列表(以行业大类和详细类为例)
  13. 最简单AnyLogic安装教程——天津理工大学
  14. qcnfa435_【路由知识小课堂番外篇】支持MU-MIMO技术设备一览表(2017.9.25第一版)...
  15. 即将截止?四川省2022年工业领域大企业大集团跨越发展激励项目申报条件、材料、要求及流程
  16. vb如何调用计算机日历,跪求vb.net简易日历制作的源代码
  17. RestTemplate 超时值
  18. 如何使scrapy爬取信息不打印在命令窗口中
  19. 安装打印机提示未能添加服务器,无法安装打印机解决方法
  20. cocoscreator使用说明

热门文章

  1. etl spring_山寨一个Spring的@Component注解
  2. c++ 判断数学表达式有效性_2009年高考数学上海卷难度如何?独特的题型设计,让你耳目一新...
  3. 计算机组成原理:原码、补码一位乘,Booth算法
  4. Mysql自增id用完怎么办?
  5. openresty入门与配置了解
  6. 看雪 好文 汇集贴(持续更新)
  7. nearly,about,almost的区别
  8. Android逆向系列之ARM语法篇
  9. Ionic APP 热更新 之 产品发布状态下的热更新搭建,去local-dev-addon插件
  10. Volley 源码分析