合并两个有序数组
2015-06-26 15:17
260 查看
题目:有两个排序的数组A和B,数组A剩余的空间刚好够容纳B,请实现一个函数,把B中的所有数字插入到A中并且所有的数都是排序的。
很多人一开始的想法就是简单的插入,足够暴力,在A中直接从头到尾遍历,找到合适的位置就移动后面所有的元素,让出一个位填补新插入的数,这种做法是效率最低的。
反其道而行之,更好的办法是从尾开始比较A和B中的数字,把较大的数字复制到A的末尾。
这种解决方法同样可以运用到字符串替换中去,如果要将字符串中的空格替换成“%20”(在网络编程中,URL中如果包含空格、“#”等特殊字符,可能导致在服务器端无法正确解析,所以需要进行转换,转换规则为在‘%’后面加上ASCII码的两位十六进制表示。比如空格的ASCII码是32,所以十六进制就是20,那就是转换成%20。),如果从头到尾遍历去插入,移动字符串的次数会很多,那么如果从一开始就知道空格的数量,申请多的内存给字符串,然后从尾开始复制,遇到空格就替换,可以有效减少移动次数。
数组合并的代码如下:
很多人一开始的想法就是简单的插入,足够暴力,在A中直接从头到尾遍历,找到合适的位置就移动后面所有的元素,让出一个位填补新插入的数,这种做法是效率最低的。
反其道而行之,更好的办法是从尾开始比较A和B中的数字,把较大的数字复制到A的末尾。
这种解决方法同样可以运用到字符串替换中去,如果要将字符串中的空格替换成“%20”(在网络编程中,URL中如果包含空格、“#”等特殊字符,可能导致在服务器端无法正确解析,所以需要进行转换,转换规则为在‘%’后面加上ASCII码的两位十六进制表示。比如空格的ASCII码是32,所以十六进制就是20,那就是转换成%20。),如果从头到尾遍历去插入,移动字符串的次数会很多,那么如果从一开始就知道空格的数量,申请多的内存给字符串,然后从尾开始复制,遇到空格就替换,可以有效减少移动次数。
数组合并的代码如下:
<?php /* $data1 数组A $data2 数组B $num1 数组A的有效元素个数 */ function merge(&$data1,$data2,$num1) { $total=count($data1); $num2=count($data2); while($num1>0&&$num2>0) { if($data1[$num1-1]>$data2[$num2-1]) { $data1[$total-1]=$data1[$num1-1]; $total--; $num1--; } else { $data1[$total-1]=$data2[$num2-1]; $total--; $num2--; } } if($num2>0) { while($total>0&&$num2>0) { $data1[$total-1]=$data2[$num2-1]; $total--; $num2--; } } } $a=array(1,3,5,7,9,0,0,0,0,0); $b=array(2,4,6,8,10); merge($a,$b,5); print_r($a);
相关文章推荐
- MAC命令 和 vi命令
- JVM学习笔记(一)------基本结构
- 查找当前SQL Server下的Active Session正连接着哪个数据库
- 手机浏览器全屏模式
- JVM学习笔记(一)------基本结构
- 关于背景图片定位问题
- 66. Plus One
- javascript实现textarea中tab键的缩排处理方法
- mysql5.6迁移到mariadb
- android平台led开发之内核硬件驱动层(一)
- Nginx日志管理和切割
- cinder创建volume流程简介
- Android单元测试
- WebSphere Application Server 动态高速缓存技术教程
- C#发送邮件的方法及实例代码
- Unity3d陀螺仪看全景图
- 错误笔记:Caused by: java.lang.StackOverflowError
- 50个UI设计资源网站
- IoC和DI的理解
- iOS解决两个静态库的冲突 duplicate symbol