第一部分:

三道编程题。

1.两个整数的二进制表示中,求不同位数的个数。

比如输入1和2,01和10不同位数为2,故输出为2.

2.选择买入卖出股票的最大收益,要求交易次数为两次,但是第二次买入必须在第一次卖出的时间节点之后。

比如{3,8,5,1,7,8},最大收益为8-3加上8-1,等于12.

3.求linux文件目录中两个分支的最近父节点。

root->0->1->2

|

3->4

此时1和3的最近父节点为0,2和4的最近父节点为0,1和2的最近父节点为1。

输入两个节点indexA和indexB,找出最近连接点,即找出最近父节点。

第二部分:

四道主观题,根据你投的岗位进行选择性答题,客户端、前端、后台等。

由于我投的岗位是客户端,所以只做了第一题和第四题

1.客户端

Bundle是什么?Bundle和Java中Map的区别?Android中为什么不用Map而是使用Bundle传递数据?

2.前端

3.后台

4.编程题

在一个整形数组N中,寻找和为M的两个数,要求复杂度低。如有返回两数,没有返回-1.

第一部分解答

1.基本思想:两数先异或运算,把位数不同的位全部转成1,最后求出二进制结果中1的个数即可。

#include <iostream>
using namespace std;int cal(int a, int b)
{  int M = a ^ b;  int num = 0;  while(M)  {  M &= (M-1);  num++;  }  return num;
} int main()
{int a,b;cin>>a>>b;cout<<cal(a,b)<<endl;return 0;
}

2.基本思想:

http://blog.csdn.net/lu597203933/article/details/44998499
此题就是选择买入卖出股票的最大收益,对于第i天卖出的最大收益即为第i天的股市价格减去[0,i-1]天内的最小股市价格,当第i天的股市价格比漆面最低股市价格还低,则更新最低股市价格。然后取最大的股市收益,为DP问题。 用profit[i]表示第i天的收益,则minBuyPrice = min(minBuyPrice, prices[i]),并且profit[i] = prices[i]-minBuyPrice.   然后取profit中的最大值。

动态规划,用两个数组,第一个数组f[i]用来表示在[0,i]内进行买入卖出的最大收益,用g[i]表示在[i,n-1]内进行买入卖出的最大收益。然后最大收益即为max(f[i]+g[i])。

#include <iostream>
using namespace std;#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))int maxProfit(int prices[], int n)
{int i,minP,maxP,ans=0;int *f=(int *)malloc(sizeof(int)*n);// 表示在[0,i]内进行买入卖出所能获得的最大profitint *g=(int *)malloc(sizeof(int)*n);// 表示在[i,n-1]内进行买入卖出所能获得的最大profit  结果就为max(f1[i]+f2[i])  if(n<2)return 0;else{f[0]=0;g[n-1]=0;for(i=1,minP=prices[0];i<n;i++){minP=min(minP,prices[i]);f[i]=max(f[i-1],prices[i]-minP);         }for(i=n-2,maxP=prices[n-1];i>=0;--i){maxP=max(maxP,prices[i]);g[i]=max(g[i+1],maxP-prices[i]);            }}for(i=0;i<n;i++){ans=max(ans,f[i]+g[i]);}return ans;
}int main()
{int prices[6]={3,8,5,1,7,8};cout<<maxProfit(prices, 6)<<endl;return 0;
}

3.基本思想:

将连接关系转换为二维数组存储。如A->B有连接则为1,无连接则为0.

indexA和indexB直接相连,则最近父节点为indexA和indexB中较小的一个,

indexA和indexB不直接连接,找出都连接indexA和indexB的节点即为最近父节点。

0 1 2 3 4

0  0 1 0 1 1

1  1 0 1 0 0

2  0 1 0 0 0

3  1 0 0 0 0

4  1 0 0 0 0

连接关系如下:

4

|

0——>1——>2

|

3

方法一:递归遍历

#include <iostream>
using namespace std;int find(int a[][5],int indexA,int indexB)//假设二维数组长宽都为5
{int result;if(indexA==0 || indexB==0){result=0;return result;}else if(a[indexA][indexB]==1)//直接相连{if(indexA>=indexB)result=indexB;elseresult=indexA;return result;}else if(a[indexA][indexB]==0)//不直接相连{for(int i=0;i<5;i++){if(a[i][indexA]==1 && a[i][indexB]==1){result=i;return result;}else if(a[i][indexA]==1)find(a,i,indexB);//递归else if(a[i][indexB]==1)find(a,indexA,i);}  }
}int main()
{int a[5][5]={0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0};cout<<find(a,1,2)<<endl;cout<<find(a,3,4)<<endl;cout<<find(a,0,4)<<endl;cout<<find(a,2,4)<<endl;return 0;
}

方法二:数组存储

基本思想:

不同数组A和B分别存储indexA和indexB的所有父节点,然后从头到尾遍历A和B,找到A和B的第一个相同点,就是最近父节点

    #include <iostream>  using namespace std;  int find(int a[][5],int indexA,int indexB)//假设二维数组长宽都为5  {  int result;  int A[5]={0}; //存储indexA和indexB的所有父节点int B[5]={0};int xA=indexA;int xB=indexB;int kA=0,kB=0;A[kA++]=indexA;B[kB++]=indexB;for(int k=0;k<5;k++){if(a[k][xA]==1 && k<=xA){A[kA++]=k;xA=k;}if(a[k][xB]==1 && k<=xB){B[kB++]=k;xB=k;}}//此时数组A和B中存储的就是indexA和indexB的所有父节点,下标从大到小//要找indexA和indexB的最近父节点,从头开始遍历数组A和B,找到最小的相同点就是答案//       for(int kk=0;kk<5;kk++)
//      {
//          cout<<A[kk]<<" "<<B[kk]<<endl;
//      }int i=0,j=0;while(i<5 && j<5){if(A[i]>B[j])i++;else if(A[i]<B[j])j++;else{result=A[i];break;}}return result;}  int main()  {  int a[5][5]={  0,1,0,1,1,  1,0,1,0,0,  0,1,0,0,0,  1,0,0,0,0,  1,0,0,0,0};  cout<<find(a,1,2)<<endl;//1cout<<find(a,3,4)<<endl;//0  cout<<find(a,0,4)<<endl;//0cout<<find(a,2,4)<<endl;//0return 0;  }  

第二部分解答

1..Bundle格式的文件是Unix/Linux系统中的一种可执行文件。用户可以在终端中使用./***(文件名).bundle命令使其运行。必要时需要使用sudo执行以提供超级用户权限,并且需要提供管理员密码。

Bundle类是一个key-value对,“A mapping from String values to various Parcelable types.”用于Android的Activity之间传递数据的类。

Bundle和Map区别:

Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。

相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和

putInt()/getInt()。Bundle的内部实际上是使用了HashMap类型的变量来存储putXxx()方法放入的值。

Android开发默认情况下,通过Bundle bundle=new Bundle();传递值是不能直接传递map对象的,解决办法:

第一步:封装自己的map,实现序列化即可

/*** 序列化map供Bundle传递map使用* Created  on 13-12-9.*/
public class SerializableMap implements Serializable {private Map<String,Object> map;public Map<String, Object> getMap() {return map;}public void setMap(Map<String, Object> map) {this.map = map;}
}

第二步:传递数据:

Intent intent=new Intent(ListViewActivity.this,UpdateWatchActivity.class);//传递数据final SerializableMap myMap=new SerializableMap();myMap.setMap(map);//将map数据添加到封装的myMap<span></span>中Bundle bundle=new Bundle();bundle.putSerializable("map", myMap);intent.putExtras(bundle);

第三步:接收数据:

Bundle bundle = getIntent().getExtras();SerializableMap serializableMap = (SerializableMap) bundle.get("map");

到此数据就能在通过map传递和使用了。

2.网上这道题泛滥,求数组N中和为M的两个值,就不给代码了。

(1)如果扫两遍,则时间复杂度为O(n^2);

(2)先排序,后二分查找,排序,快排或者堆排O(nlogn),

然后对于每个数i,在排好序的数组中用二分查找找M-i,复杂度O(nlogn)

相加最后时间复杂度还是O(nlogn).

小米 2016届实习生招聘笔试相关推荐

  1. 2013年阿里巴巴实习生招聘笔试题目及解答

    有幸参加了2013年5月5日阿里巴巴的实习生招聘笔试,这次笔试的难度对我而言,前半部分不涉及算法的内容,都比较容易.而后面3道关于算法的习题都解答得很不好,暴露出来自己的一些问题.本人马上也要毕业了, ...

  2. 百度2015实习生招聘笔试

    百度2015实习生招聘笔试 题目描述 在命令行中输入一个字符串,例如"aAfbgg",要求按照一定的规则计算此字符串拆分后字符的值相加后的总和值.规则如下: a与A值为1,b与B值 ...

  3. 2011百度实习生招聘笔试试题---软件测试—测试方向(BJ)

    2011百度实习生招聘笔试试题---软件测试-测试方向(BJ) 来源: 周广陵的日志 第一大题  简答题 1.extern"C"{}是什么,它能起到什么作用? 2.介绍两种经典设计 ...

  4. 微软实习生招聘笔试题目

    微软实习生招聘笔试题目 您好!以下是本次微软实习生招聘的笔试题目,请仔细阅读并认真答题: 注意:本次测试题目仅限本人阅读,请勿传阅他人.谢谢! 提交材料 1.不超过2页的说明书,包括算法,设计,使用说 ...

  5. 京东广告研发部2024届实习生招聘

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->[AI求职群]微信技术交流群 京东广告研发部2024届实习生招聘 此次实习生招聘是部门直聘 ...

  6. 【IT企业笔试集】2013年阿里巴巴实习生招聘笔试题目及解答

    有幸参加了2013年5月5日阿里巴巴的实习生招聘笔试,这次笔试的难度对我而言,前半部分不涉及算法的内容,都比较容易.而后面3道关于算法的习题都解答得很不好,暴露出来自己的一些问题.本人马上也要毕业了, ...

  7. 华为2018届校招勇敢星实习生招聘笔试+面试经历

    写在前面   之前一直在忙期末,最近才歇了下来,来总结一下之前参加华为2018届勇敢星实习生笔试+面试(研发类)并顺利拿到offer的经历.   我是在微信上投的Android研发实习生岗,很快就收到 ...

  8. 腾讯实习生招聘笔试题目

    2013腾讯实习生笔试题  一. 单项选择题 1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项() Int a1=x+y-z; int b1=x*y/z; Int a2=x- ...

  9. 2016年实习生招聘信息

    公司 宣讲会 链接 内推截止日期 网申截止日期 备注 摩根士丹利IT部门 3月16日晚上 http://eqxiu.com/s/ip5LEvp1?from=timeline&isappinst ...

最新文章

  1. bat curl 返回值_bat curl 发送http请求 监控网站
  2. 通过TStringList保存csv文件,只要循环.Add表格里面的每行记录进去,保存即可
  3. 简单算法题:leetcode-2 两数相加
  4. NameNode与DataNode的工作原理剖析
  5. 软件需求和结构_软件体系结构
  6. 先判断对象是否为NULL再进行操作
  7. 40款精简活力fcpx标题字幕 mTitle Kinetic for Mac
  8. 4.9 利用对应的泛型替换Hashtable[转]
  9. 苹果隐私部门负责人:在iPhone上侧载应用会减少用户选择
  10. 百度智能云发布『乘风』 端云一体化方案 助力人脸应用10分钟落地
  11. 如何在计算机管理路由器,怎么查看路由器的管理IP地址?
  12. MOS管、IGBT、BJT的区别
  13. 武汉加油——传染病模型拟合
  14. 计算机显示去掉拼音分类,win8系统取消电脑文件显示以字母数字拼音分组的操作办法...
  15. 微信开发生成测试签名--signature,并使用微信jssdk获取位置
  16. 新浪微博开放平台开发总结
  17. 凭实力讲,运维工程师能不能做成预言家?
  18. 流星滑落-第13届蓝桥杯Scratch省赛1真题第2题
  19. Oracle - Database 甲骨文
  20. 送外卖优先级_【超新人\超现实】送外卖需要了解的那些事

热门文章

  1. Java实现第八届蓝桥杯魔方状态
  2. php抓取html元素内容 采集网页
  3. 微型计算机原理无微机接口,微机原理与接口技术
  4. KMP 算法详解(CPP 实现)
  5. 基于人脸识别的公司考勤门禁系统的设计---笔记
  6. 不是有效的win32应用程序_闪电网络走进生活还远吗?Lightning Labs推出Alpha版本桌面应用程序...
  7. 《2周攻克期权策略》读书笔记
  8. windows 8 微软拼音输入法
  9. 奥鹏教育大学计算机基础,奥鹏南开大学《大学计算机基础》20秋学期在线作业参考试题答案...
  10. 蓝桥杯准备(Python)罗马数字