【剑指offer】题目4
来源:互联网 发布:java默认访问修饰符 编辑:程序博客网 时间:2024/05/17 01:02
题目:给定一个字符数组,存放长度为len的字符,且数组还有很多剩余的空间,要求把数组中的空格替换为“%20”。
要求只在给定的数组上操作,不能另外增加数组。
一个简单的实现是,len位置开始生成新的数组,一边从0位置开始遍历,一边把值赋到len位置开始的新数组,然后再把len位置的数组移到0位置。这个方法是On级别,但是需要2n+的空间。
更好的办法是从末尾开始。就是先统计空格的数目,然后就知道新的字符串的长度,假设末位置为i2,原来的末位置为i1,从i1往回遍历,填充i2。这样的空间复杂度降低了很多。
public static void main(String args[]){char[] a= new char[100];a[0] = 'a';a[1] = 'b';a[2] = ' ';a[3] = 'c';int len = convert(a, 4);print(a, len);}public static int convert(char[] array, int len){int count = 0;for(int i = 0; i < len; i++){if(array[i] == ' ')count++;}int p1 = len - 1;len = count * 2 + len;int p2 = len - 1;while(p1 != p2){if(array[p1] != ' '){array[p2] = array[p1];p2--;}else{array[p2--] = '0';array[p2--] = '2';array[p2--] = '%';}p1--;}return len;}public static void print(char[] array, int len){String s = "";for(int i = 0; i < len; i++){s += array[i];}System.out.println(s);}
另外这个思路也可以运用到merge sort上,给定了两个有序的数组,其中一个空间足够大,然后就可以按照上面的思路从末尾形成新的有序数组。
阅读全文
0 0
- 【剑指offer】题目4
- 剑指offer-4/题目1510:替换空格
- 剑指offer面试题4扩展题目
- 剑指offer题目集
- 剑指offer题目记录
- 剑指offer题目概括
- 剑指offer题目
- 【剑指offer】题目10
- 剑指offer题目分类
- 剑指offer题目1
- 剑指offer题目练习一
- 剑指offer题目1-10
- 剑指offer题目汇总(一)
- 剑指offer题目汇总(二)
- 剑指offer题目汇总(三)
- 剑指offer题目思想汇总
- 剑指offer题目及答案
- c++知识点(剑指offer题目)
- select的fd超过1024将会非常危险------select导致core dump (句柄增多/句柄泄露引起)
- Tcp连接建立释放图
- 网络编程(编写一个小型服务器)--csapp11章
- Note-Day01
- [BZOJ4921][Lydsy六月份月赛 .E][二分][瞎搞]互质序列
- 【剑指offer】题目4
- C语言关键字Volatile
- JSP的静态与动态包含
- HDU 6030 Happy Necklace【矩阵快速幂】
- lualib.h详解
- 函数模板的模板参数自动推导探究
- Opencv及Kinect/OpenNI常用学习网址
- IDEA破解办法
- 扯淡的bug--redis