剑指offer
来源:互联网 发布:建筑工地用工人员软件 编辑:程序博客网 时间:2024/06/07 11:45
//方法1 : 通过类似快排的方法找到排在第k+1位置的数,并且左边都是比他小的,因此桌面的书就是k个最小的数#include<iostream>#include<vector>using namespace std;void Swap(int &a, int &b){ int temp = a; a = b; b = temp;}//和快排类似, 找一个枢纽元,把小于枢纽元的数放在枢纽元左边, 返回枢纽元的位置int Partion(int *nArray, int nBegin, int nEnd){ if(nArray == NULL|| nBegin <0 || nEnd<0) throw exception("ERROR"); int nPivot = nArray[nBegin]; //枢纽元 int nLeft = nBegin; int nRight = nEnd; while(nLeft != nRight) { while(nArray[nRight]>=nPivot && nLeft < nRight) --nRight; while(nArray[nLeft]<=nPivot && nLeft < nRight) ++nLeft; if(nLeft<nRight) { Swap(nArray[nLeft], nArray[nRight]); } } Swap(nArray[nBegin], nArray[nLeft]); return nLeft;}void GetLeastNum(int *nArray, int nLength, int k){ if(nArray == NULL || nLength <= 0) throw exception("ERROR"); int nBegin = 0; int nEnd = nLength-1; //找出排在第k+1个位置的那个数的值. int nNum = Partion(nArray, nBegin, nEnd); while(nNum != k+1) { if(nNum > k+1) { nNum = Partion(nArray, nBegin, nNum-1); } else { nNum = Partion(nArray, nNum+1, nEnd); } } for(int i = 0; i < k;++i) { cout<<nArray[i]<<", "; } cout<<endl;}int main(){ int a[] = {1,2,3,4,5,6,7,8,9,0}; GetLeastNum(a, 10, 5);}
0 0
- 剑指OFFER
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 《剑指offer》
- 剑指Offer
- 剑指offer
- 剑指offer
- unittest 源代码分析(二)--main.py代码分析
- LeetCode035 Search Insert Position
- 详解Android中AsyncTask的使用
- 《面向对象》第七章 总结
- jfinal main方法里操作数据库+redis
- 剑指offer
- C++笔记(一)
- LeetCode036 Valid Sudoku
- 2017年产品经理之项目管理流程-全栈工程师熊盼
- x86-64和x86
- Java 知识点 集合+异常
- 剑指offer-面试题31 求连续子数组的最大和
- 计数排序-《算法导论》学习笔记八
- 1393: [Ceoi2008]knights