两道面试算法题
来源:互联网 发布:c语言考研题库 编辑:程序博客网 时间:2024/06/08 16:19
最近面试 两道算法题 说难不难 要写全对也不容易 很惭愧 我没有一次写对
第一道:无序int数组 找到中位数
void swap(int &a,int &b){ int temp = a ; a = b; b = temp;}int get_kth_number(vector<int> &num,int k,int start,int end){ //类似于快排的一次划分 int pivot = num[start]; int i = start+1; int j = end; while(i<j){ int index = start; while(num[i]>pivot&&i<j){ i++; }//找到比i小的数 或者i>=j说明找不到了 while(num[j]<pivot&&i<j){ j--; } //如果i==j了 说明之前的循环找不到比pivot小的数 或者当前循环找不到比pivot大的数 //或者找到了比pivot大的数 if(i==j) break; else swap(nums[i],nums[j]); } //一次划分结束 index = i; if(index==k-1) return num[index]; else if(index>k-1){ return get_kth_number(num,start+k,start,index-1); } else{ return get_kth_number(num,end-k,index+1,end); }int get_middle(vector<int> &num){ int middle = num.size()>>1; return get_kth_number(num,middle,0,size-1);}
第二道:自己实现atoi(char *p,int err)
#define NULLPTR -1#define OVERFLOW -2int atoi(char *s, int& err) { bool positive = true; int res = 0; if(s==NULL){ err = NULLPTR; return -1; } char* pos = s; while(*pos==' '){ pos++; } if(*pos=='+'){ positive = true; pos++; } else if(*pos=='-'){ positive = false; pos++; } while(*pos=='0'){ pos++; } if(strlen(pos)>=11) { err= OVERFLOW; return -1; } if(strlen(pos)==10){ if((positive&&strcmp(pos,"2147483647")>0)||(!positive&&strcmp(pos,"2147483648")>0){ err= OVERFLOW; return -1; } } while(pos<='9'&&pos>='0'){ //count++; res=res*10+*pos-'0'; pos++; } retrun positive?res:-1*res;}
0 0
- 两道面试算法题
- 面试遇到的两道算法题
- 两道面试中的算法题
- 美团面试的两道算法题
- 美团面试的两道算法题
- 两道算法题
- 两道算法题
- 两道算法题
- 两道SQL面试题目
- 面试的两道试题
- 两道百度面试题目
- 面试的两道智力题
- 面试算法题:从指定数组找出两数的和为指定的数
- 森浦资讯(C++ 面试两道程序题)
- 算法--两道百度笔试题
- 算法--两道百度笔试题
- 搜狐笔试两道算法题
- 算法--两道百度笔试题
- 带返回值的多线程实现
- springMVC的全流程使用和分析
- 使用bootstrapvalidator的remote验证经验
- vim功能
- SQL Server Browser 服务
- 两道面试算法题
- 微信小程序开发中常见问题及解决方法
- 一次net::err_connection_reset的过程记录
- 字符串扩展
- 用HashMap和双链表实现多线程下的LRU缓存算法(java版)
- 深度学习原理与应用笔记
- 二分查找
- 边框,背景属性
- 【cocos2d-js官方文档】十七、事件分发机制