微软实习生笔试
2010-11-22 23:58
260 查看
昨天第一次参加这种海笔,之前找实习的时候都是被关在一个小黑屋里孤独的写代码,有点小不适应。
啥都不说了,直接上大题。
求一个数列中,逆序对的个数,要求算法的时间复杂度为O(nlogn)。
O(n2
)的算法就不说了。
拿到这题,第一反应就是先将所有数快排序,然后拷贝到另一个数组中去,用原数组的数据做索引,二分查并删除找到的元素,返回这个元素之前的元素个数。后来写到一半的时候,发现这不就是二叉排序树么。。哎,不过写了就写了,就当是练兵吧。
另外还考了图论,位运算,前缀后缀表达式,二叉树等。
啥都不说了,直接上大题。
求一个数列中,逆序对的个数,要求算法的时间复杂度为O(nlogn)。
O(n2
)的算法就不说了。
拿到这题,第一反应就是先将所有数快排序,然后拷贝到另一个数组中去,用原数组的数据做索引,二分查并删除找到的元素,返回这个元素之前的元素个数。后来写到一半的时候,发现这不就是二叉排序树么。。哎,不过写了就写了,就当是练兵吧。
//swap void swap(int &a, int &b) { int tmp=a; a=b; b=tmp; } //partition int partition(int *Array,int left,int right,int n) { int pivot=Array[left]; swap(Array[left],Array[right]); int storeIndex=left; for(int i=left;i<right;++i) { if(Array[i]<=pivot) { swap(Array[i],Array[storeIndex]); ++storeIndex; } } swap(Array[storeIndex],Array[right]); return storeIndex; } // 快速排序 void qSort(int *Array, int left, int right, int n) { if(right<=left)return; int p=partition(Array,left,right,n); qSort(Array,left,p-1,n); qSort(Array,p+1,right,n); } //删除元素 void deleteEle(int index, int *Array, int n) { for(int i=index;i<n;++i) { Array[i]=Array[i+1]; // 后一个覆盖前一个 } } // 二分搜索 int BinarySearch(int *Array,int low, int high, int n, int x) { int mid=0; while(low<=high) { mid=(low+high)/2; if(Array[mid]>x) { high=mid-1; } else if(Array[mid]<x) { low=mid+1; } else { break; } } deleteEle(mid,Array,n); Array[n-1]=2000; return mid; } //O(n*lg(n)) int reversePair2(int *array, int n) { int *tmpArray=new int ; for(int i=0;i<n;++i) { tmpArray[i]=array[i]; } int count=0; qSort(tmpArray,0,n-1,n); for(int i=0;i<n;++i) { int index=BinarySearch(tmpArray,0,n-1,n,array[i]); count+=index; } delete [] tmpArray; return count; }
另外还考了图论,位运算,前缀后缀表达式,二叉树等。
相关文章推荐
- 【2014微软实习生笔试】1:字符排序
- 2012年微软校招实习生笔试题(2012.4.7)
- 微软暑期实习生笔试 4.6日
- 【2014微软实习生笔试】2:找到第k个字符串
- 微软2012实习生笔试题及答案(望讨论)
- 微软2012实习生笔试题及答案(望讨论)
- 【2014微软实习生笔试】3:逆序数问题
- 微软2013暑假实习生笔试题
- 2013年微软实习生招聘笔试题目
- 微软2012年实习生录取笔试题(及答…
- 微软2012实习生笔试题+答案解析
- 微软2016年实习生在线笔试第二题(403 Forbidden)
- 微软2013暑假实习生笔试题
- 微软2013暑假实习生笔试题--cdecl stdcall
- 微软2013实习生笔试题目
- 2013微软校园实习生笔试题
- 2014微软实习生笔试题-String reorder
- Legendary Items-微软2017实习生笔试第一题
- 2010年11月21日微软实习生笔试题--反序对 数目求解
- 微软2013暑期实习生笔试题错误