百度面试题
来源:互联网 发布:you don t know js 编辑:程序博客网 时间:2024/06/05 08:14
百度面试题
个人信息:就读于燕大本科软件工程专业 目前大三;
本人博客:google搜索“cqs_2012”即可;
个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;
博客时间:2014-5-14;
编程语言:C++ ;
编程坏境:Windows 7 专业版 x64;
编程工具:vc++ 6.0;
制图工具:office 2007 powerpoint;
硬件信息:7G-3 笔记本;
真言
题目与其当观众,就不如上舞台。
思路实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数
,则对n除以2;否则进行加一或者减一。一直得到1为止。
例如对于 5
5-1 得到 4
4 除以2 得到 2
2 除以2 得到 1
一共三次操作。
1.严格解法
// 函数定义// 方法1:int Number(int n){int m,l;// 异常出入if( ! (n>0))return -1;// n 为偶数if(n%2 == 0){return Number(n/2)+1;}// n 为奇数else{// 出口if(n == 1)return 0;m = Number(n+1);l = Number(n-1);if(m<l)return m+1;else return l+1;}}
时间复杂度 O(log n)2.动态规划方法,建立一维表进行预处理,适合对大量数据进行查找操作
预处理操作,把预处理数据存在data数据表里,size为数组的长度
实验// 函数定义// 方法二void _PreDeal(int * data,int size){int i,j;if(data != NULL && size > 0){// 头处理一下data[1] =0;data[2] =1;//循环处理for(i =4,j=3;i<=size;i= i+2,j=j+2){//处理偶数: m = m/2 +1;data[i] = data[i/2]+1;//处理奇数: m = min(min+1,min-1)+1;data[j] = (data[j+1]<data[j-1])?data[j+1]+1:data[j-1]+1;}// 处理最后一个数据if(j<=size)//处理奇数: m = min(min+1,min-1)+1;data[j] = (data[j+1]<data[j-1])?data[j+1]+1:data[j-1]+1;}}预处理时间为 O(n),查表时间 O(1)
方案一
对于1-1000,000数据操作,时间处理为 187186 ms
方案二
对于1-1000,000数据操作,时间处理为 12698 ms
0 0
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 2007 百度面试题
- 百度面试题一道
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题
- 百度面试题1
- 百度面试题
- 百度面试题
- 腾讯 百度 面试题
- 输入一行字符串,找出其中出现的相同且长度最长的字符串,输出他及其首字符串位置
- 缺乏运动 七种病早早光临
- 数据库分类
- 资源分离
- UVA 11292 和 UVA 11729
- 百度面试题
- sznsadtryk
- 汉字对应的unicode编码
- 快速排序
- 非极大值抑制(NMS)
- 网易java开发实习日记
- codeforce 5A Chat Server's Outgoing Traffic
- html5.js让IE(包括IE6)支持HTML5元素方法
- mongodb group分组(最详细、最通俗、最易理解的讲解)