谷歌面试题:数组元素移动交叉
来源:互联网 发布:企业官方网站java模板 编辑:程序博客网 时间:2024/05/18 02:27
题目:输入数组:{a1,a2,…,an,b1,b2,…,bn}, 在O(n)的时间,O(1)的空间将这个数组的顺序变为{a1,b1,a2,b2,a3,b3,…,an,bn}, 且不需要移动,通过交换完成,只需一个交换空间。
解答:从结果入手,结果数组的中垂线两边分别a数组的一半和b数组的一半的混合,继续将子数组以中垂线划分下去,可以看到类似的规律,因此,可以使用类似的分治算法实现。
参考代码:
- void solve(int arr[],int s ,int e)
- {
- if( s >= e)
- return;
- int center = (s+e)/2;
- //left part: s,...,center;
- //right part center+1,...,e
- int ls = s;
- int le = center;
- int rs = center+1;
- int re = e;
- for(int i=(le+ls)/2+1,j = rs ; i <= le; i++,j++)
- mySwap(arr[i],arr[j]);
- //奇数个
- if(le!=ls && (le-ls)%2==0){
- le++;
- rs--;
- }
- solve(arr,ls,le);
- solve(arr,rs,re);
- }
网络转载请注明:转载自程序员面试之家
并注明本文链接地址: 谷歌面试题:数组元素移动交叉
- 谷歌面试题:数组元素移动交叉
- 谷歌面试题:数组元素移动交叉
- 谷歌面试题:数组元素移动交叉
- 循环移动数组元素
- 移动数组中的元素
- 数组元素移动
- 数组元素的上下移动
- 【谷歌面试题】求数组中两个元素的最小距离
- 使用memcpy进行数组元素移动
- 【HUSTOJ】1079: 数组元素的移动
- 数组元素的移动(方法优化)
- 数组元素的移动(补充)
- 小算法--数组中元素的移动
- js实现数组元素上下移动
- Intersection of Two Arrays(两数组的交叉元素)
- 面试题:数组中找重复元素
- 小米试题 数组其他元素乘积
- 将数组中指定数量的元素移动数组后面
- Image.FromFile 从数据库读取流加载图片
- IT专业人士如何更有效的学习专业知识
- Swing:高性能控件——MessagePane,可用于显示系列信息
- 媒体播放器三大架构
- DataTable 只保留想要的几列
- 谷歌面试题:数组元素移动交叉
- VC里面的cstring跟int char*转化
- SQL语言学习心得
- 我们渴望和平freeeim
- 这样的话freeeim
- 我更爱荷叶freeeim
- ConcurrentHashMap解析
- wiki 网站
- 跨越OpenGL和D3D的鸿沟(一):开篇