左旋字符串的应用 百度面试
来源:互联网 发布:黑莓passport视频软件 编辑:程序博客网 时间:2024/04/30 08:50
转自 http://blog.csdn.net/hackbuteer1/article/details/7542774
4、数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序。要求空间复杂度为O(1)。注:al[i]元素是支持'<'运算符的。
/*数组a[begin, mid] 和 a[mid+1, end]是各自有序的,对两个子段进行Merge得到a[begin , end]的有序数组。 要求空间复杂度为O(1)方案:1、两个有序段位A和B,A在前,B紧接在A后面,找到A的第一个大于B[0]的数A[i], A[0...i-1]相当于merge后的有效段,在B中找到第一个大于A[i]的数B[j],对数组A[i...j-1]循环右移j-k位,使A[i...j-1]数组的前面部分有序2、如此循环merge3、循环右移通过先子段反转再整体反转的方式进行,复杂度是O(L), L是需要循环移动的子段的长度*/#include<iostream>using namespace std;void Reverse(int *a , int begin , int end ) //反转{for(; begin < end; begin++ , end--)swap(a[begin] , a[end]);}void RotateRight(int *a , int begin , int end , int k) //循环右移{int len = end - begin + 1; //数组的长度k %= len;Reverse(a , begin , end - k);Reverse(a , end - k + 1 , end);Reverse(a , begin , end);}// 将有序数组a[begin...mid] 和 a[mid+1...end] 进行归并排序void Merge(int *a , int begin , int end ){int i , j , k;i = begin;j = 1 + ((begin + end)>>1); //位运算的优先级比较低,外面需要加一个括号,刚开始忘记添加括号,导致错了很多次while(i <= end && j <= end && i<j){while(i <= end && a[i] < a[j])i++;k = j; //暂时保存指针j的位置while(j <= end && a[j] < a[i])j++;if(j > k)RotateRight(a , i , j-1 , j-k); //数组a[i...j-1]循环右移j-k次i += (j-k+1); //第一个指针往后移动,因为循环右移后,数组a[i....i+j-k]是有序的}}void MergeSort(int *a , int begin , int end ){if(begin == end)return ;int mid = (begin + end)>>1;MergeSort(a , begin , mid); //递归地将a[begin...mid] 归并为有序的数组MergeSort(a , mid+1 , end); //递归地将a[mid+1...end] 归并为有序的数组Merge(a , begin , end); //将有序数组a[begin...mid] 和 a[mid+1...end] 进行归并排序}int main(void){int n , i , a[20];while(cin>>n){for(i = 0 ; i < n ; ++i)cin>>a[i];MergeSort(a , 0 , n - 1);for(i = 0 ; i < n ; ++i)cout<<a[i]<<" ";cout<<endl;}return 0;}
- 左旋字符串的应用 百度面试
- 面试热门题:字符串左旋右旋
- 微软面试100题---左旋字符串
- 字符串左旋右旋--程序员面试宝典
- 左旋字符串的做法
- 字符串的左旋右旋
- 百度面试,字符串整数的四则运算
- 微软面试之 26 左旋右旋字符串
- H面试程序(9): 左旋字符串
- 左旋字符串的三种实现
- 字符串的左旋问题解析
- 字符串的左旋和右旋
- 字符串的左旋问题解析
- 左旋字符串的三种算法
- 算法面试-学习笔记-左旋转字符串
- 程序员面试100题:左旋转字符串
- 挑战面试编程:左移字符串
- 面试 42-2: 左旋转字符串
- SQL中使用update inner join和delete inner join
- 客户现场进行路由设置及环境搭建的过程
- 【lizhi125】分享一些搜集到的免费编程入门教程资源
- POJ 2253 Frogger
- Qt 可扩展对话框创建--实验
- 左旋字符串的应用 百度面试
- 深入java编码
- Grails环境搭建
- 通用汽车公司将成为第一个安装Apple SIRI应用的汽车制造商
- Spring 多数据源事务配置问题
- 几个背包问题的总结
- 【心路历程】年薪46万的经历
- 周鸿祎谈乔布斯(张亮)
- Shell内置调试命令