最近开始刷LintCode上的题目,先从标签为容易的开始刷。今天刷的这两题目差不多为同一类型的题目,都是为按照一定的规则合并两个已经有序的数组。

  

[Q6]

描述:

  合并两个排序的整数数组A和B变成一个新的数组。

  样例:

  给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]

思路:

  题目的方法原型为:

1 public int[] mergeSortedArray(int[] A, int[] B) {}

  所以即从A和B数组中一次取数比较大小,将其中较小者放入新的数组C。

  当其中一个数组已经全部取出,则将剩余一个数组中的数全部放入数组C中。

  在归并排序中,当把一个序列分解为若干个子序列之后,正是通过递归的合并子序列来完成排序。

实现:

 1 public int[] mergeSortedArray(int[] A, int[] B) {
 2         // Write your code here
 3
 4         int[] C = new int[A.length + B.length];
 5
 6         int indexa = 0;  //表示a数组的索引位置
 7         int indexb = 0;  //表示b数组的索引位置
 8         int indexc = 0;  //表示c数组的索引位置
 9
10         //当某个数组已经全部合并进新的数组的时候跳出循环
11         while( ! ((indexa == A.length) || (indexb == B.length))){
12             if(A[indexa] <= B[indexb]){
13                 C[indexc ++] = A[indexa ++];
14             }
15             else{
16                 C[indexc ++] = B[indexb ++];
17
18             }
19         }
20         //A数组还有剩余元素
21         while(indexa < A.length){
22             C[indexc ++] = A[indexa ++];
23         }
24         //B数组还有剩余元素
25         while(indexb < B.length){
26             C[indexc ++] = B[indexb ++];
27         }
28
29         return C;
30
31 }

[Q64]

描述:

  合并两个排序的整数数组A和B变成一个新的数组。

  你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。

  样例:

  给出 A = [1, 2, 3, empty, empty], B = [4, 5]

  合并之后 A 将变成 [1,2,3,4,5]

思路:

  题目的方法原型为:

1 public void mergeSortedArray(int[] A, int m, int[] B, int n) {}

  从题目函数原型和题目描述可以看出,这次在合并的时候是在A数组的基础上进行合并,A数组的大小大于或等于A+B的大小,所以可以将B数组合并到A数组中。

  考虑两种情况:

  1 当B中的某个元素已经比A中的最后一个元素还要大时,此时不需要再继续比较了,直接将B中包括当前元素的剩余元素全部插入到A数组最后。

  2 当B中的第x元素通过比较插入到了A数组的y位置上,则第x + 1 元素直接从y + 1 位置开始继续比较,前面的无需比较。

  此题目比上面的题目还要多增加一个步骤,因为是在A数组上进行插入,所以插入之后,插入位置以后的元素需要往后移动一个位置,涉及到一个移动操作。

实现:

 1  public void mergeSortedArray(int[] A, int m, int[] B, int n) {
 2         int indexa = 0 ;   //  标识A数组的遍历位置
 3         int indexb = 0 ;   //标识B数组的遍历位置
 4         int lastIndex = m - 1  ;  //标识A数组中最后的位置
 5
 6         while ( (indexa <= lastIndex) && (indexb <= n - 1) ) {
 7             if(B[indexb] < A[indexa]){
 8                 //这个题目第一此提交出现了错误, 错误原因是下面的for循环中应该是i -- ,  手滑写成了 i ++
 9                 for(int i = lastIndex ; i >= indexa ; i --){
10                     A[i + 1] = A [i] ;
11                 }
12                 A[indexa ++] = B[indexb ++];
13                 lastIndex ++ ;
14             }
15             else{
16                 indexa ++ ;
17             }
18         }
19         while(indexb <= n - 1 )  {
20             A[++ lastIndex] = B[indexb ++] ;
21         }
22 }

总结:

  有关于数组的操作,大多可以用过设置不同变量,来标识数组中的不同位置,从而可以进行不同的操作。

转载于:https://www.cnblogs.com/tancky/p/6574747.html

【LintCode题集】Q6、Q64相关推荐

  1. 搞来一套大厂内部资料(内含C++面试真题集)

    面试最让人糟心的是什么? 提前准备好的问题发挥不上. 临时想好的回答却支支吾吾说不到重点, 结果那自然是: 网上搜别人的面经,看了也用不上,大家履历到底还是差太多: 搜面试真题,会开放的都是一些无名小 ...

  2. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  3. 严蔚敏版《数据结构 (C语言版)》和《数据结构题集》(一)

    这里用的是严蔚敏版<数据结构 (C语言版)>和<数据结构题集>,深感自己的代码写得又渣又无力,打算把这本书好好琢磨透彻,里面的算法和模板都实现一遍,题目也都做一遍.最终能够做到 ...

  4. C语言易错题集 第四部

    C语言易错题集 第四部 一.位操作相关 二.switch()相关 三.输出相关 四.实数相关 五.指针&a相关 六.指针访问数组元素相关 七.转义字符相关 八.类型提升问题 九.是不是正确的浮 ...

  5. C语言易错题集 第二部

    C语言易错题集后续 一.共用体相关(union) 二.do,while相关 三.char溢出相关 四.printf()相关 五.++相关 六. for语句相关 七.calloc()相关 八.defin ...

  6. 面试必备算法题集之「动态规划」Ⅰ

    题目来源:LeetCode-腾讯-动态规划 题库链接:LeetCode传送门 前言 这份题集来源于 LeetCode-腾讯-动态规划 ,怀着想学习动态规划的心(带着害怕面试被问到的恐惧 )做了第一份D ...

  7. c语言解三元一次方程组_七年级下学期《8.3 一元一次不等式组》2020年高频易错题集...

    一.选择题(共10小题) 二.填空题(共5小题) 三.解答题(共5小题) 七年级下学期<8.5 一元一次不等式组>2020年高频易错题集 参考答案与试题解析 一.选择题(共10小题) [点 ...

  8. vfp体积计算机程序,浙江省计算机2级VFP程序调试真题集.doc

    浙江省计算机2级VFP程序调试真题集 程序填空(改错)题: 在考生文件夹的paper 子文件夹中,已有文件Modify.prg,请自己打开文件,在标记&&之前填写所缺代码.调试.保存, ...

  9. 2029年计算机考试题目,计算机二级题集

    计算机二级题集是一款为用户朋友们打造的学习神器,这款计算机二级题集能够提供大量的历年真题给用户朋友们学习,用户还能够在平台上面模拟考试,喜欢的朋友们快来西西下载体验一下吧! 计算机二级题集的介绍: 本 ...

最新文章

  1. 利用DHCP,http,tftp,pxe实现批量自动化部署系统
  2. codevs 1227 方格取数 2
  3. jpadao层继承什么_ABP框架领域层
  4. cordova flie文件目录_Cordova - 访问www目录下文件(获取www文件夹路径)
  5. NET问答: 如何在 dynamic 集合上使用 Linq ?
  6. 关于JS中的 NEW 和VAR
  7. 又拍云php表单,又拍云的表单api提交
  8. 大华股份2021年的半年报
  9. 对lua 实现面向对象的理解
  10. usb转rs232驱动无效,已经电脑自动扫描检测硬件改动.设备无法运行错误代码10
  11. 高德地图获取经纬度工具类
  12. JVM七大垃圾回收器上篇Serial、ParNeW、Parallel Scavenge、 Serial Old、 Parallel Old、 CMS、 G1【尚】
  13. [JZOJ5551] 【NOI2019模拟6.24】旅途【最短路】
  14. ble zephyr lbs样例,一上电进入广播状态,发送的HCI命令
  15. OpenCV图像处理形态学操作腐蚀Erode与膨胀Dilate
  16. Android笔记之(图片高斯+Glide实现微信图片加载策略+仿微信进度条)
  17. 最详细的NAT(网络地址转换)的讲解
  18. 乒乓操作的写入控制器
  19. UDP攻击是什么意思?UDP攻击防范措施
  20. PHP网络资源弄视频,土办法

热门文章

  1. android层级关系图,画出 View 的层级 3D 图和树形图来分析层级关系
  2. linux快速php,Linux 下的这些高效指令,是你快速学习的神器
  3. python整数序列求和_Python从菜鸟到高手(14):序列的加法和乘法
  4. 用node.js读写文件
  5. [bzoj1036]树的统计
  6. 解决Unity3D导出apk失败:Failed to re-package resources
  7. linux6.4 安装oracle11g 出现错误ORA-01078和LRM-00109错误
  8. DIY Ruby CPU 分析 Part II
  9. 用java创建UDF,并用于Hive
  10. 移动端开发的知识系统介绍