2015小米在线笔试题

2015小米暑期实习笔试题复盘:从C语言基础到工程素养 大厂实习笔试往往不只是考查算法刷题量,更是在检验计算机基础素养与工程思维。数组与指针的区别、结构体内存对齐、进程与线程的底层机制、TCP与UDP的场景选型,这些看似基础的概念,实则是嵌入式、网络通信、系统开发等真实工程场景的基石。理解它们背后“机制决定代价”的原理,能帮助开发者写出更健壮、更高效的代码。从基础概念到典型应用场景,再回到笔试中的具体题目与答题策略,本文结合当年小米暑期实习笔试题的复盘,梳理高频考点、常见陷阱以及时间分配方法,既适合准备实习笔试的同学查漏补缺,也适合希望夯实计算机功底的开发者对照 阅读详情

1、问题:输入两个32位int型数,求其他们二进制位有多少不相同。

      思路:对输入的两个数m,n进行异或操作结果为a,a的二进制中有多少位为1就是所求结果,

                  让a分别与32个只有一位为1其它是0的int数进行&操作若不为0就可以判断这位为1.

      代码:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

int t[32] = {0x00000001, 0x00000002, 0x00000004, 0x00000008,
             0x00000010, 0x00000020, 0x00000040, 0x00000080,
			 0x00000100, 0x00000200, 0x00000400, 0x00000800,
			 0x00001000, 0x00002000, 0x00004000, 0x00008000,
			 0x00010000, 0x00020000, 0x00040000, 0x00080000,
			 0x00100000, 0x00200000, 0x00400000, 0x00800000,
			 0x01000000, 0x02000000, 0x04000000, 0x08000000,
			 0x10000000, 0x20000000, 0x40000000, 0x80000000};

int main()
{
	int m, n;
	int a;
	cin>>m>>n;
	a = m^n;
	//cout << a << endl;
	int oneNum = 0;
	for(int i=0;i<32;++i)
	{
		if((a&t[i])!=0)
		{
			oneNum++;
		}
	}
	cout << oneNum << endl;
	return 0;
}

找到一种新方法:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

int main()
{
	int m, n;
	int a;
	cin>>m>>n;
	a = m^n;
	int oneNum = 0;
	while(a)
	{
		oneNum++;
		a = a&(a-1);
	}
	cout << oneNum << endl;
	return 0;
}

2、问题:股市股票买卖,共有n天的股市价格情况,p[i]代表第i天的股市价格,你可以至多买卖两次股票(每次买股票时手中是没有股票的),问如何买卖收益才最大。

      思路:m[i][j]代表从第i天到第j天股票价格的最低值,m[i][j]=min(m[i][j-1],p[j])

                  分两种情况:(1)买卖0次或1次,maxVal = p[i]-m[1][i-1];

                                          (2)买卖两次v[i][j]代表分别在第i天和第j天卖出时收益最大值,则v[i][j] = p[i]-m[1][i-1]+p[j]-m[i+1][j-1],求v[i][j]中最大值。

     代码:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int NUM = 100;

int m[NUM][NUM];
int p[NUM];
int v[NUM][NUM];

int main()
{
	int n;
	while(cin>>n)
	{
	    memset(m, 0 , sizeof(m));
     	memset(p, 0, sizeof(p));
    	memset(v, 0, sizeof(v));
	    for(int i=1;i<=n;++i)
	    {
		     cin>>p[i];
		     m[i][i] = p[i];
	    }
	
	    for(int i=1; i<n; ++i)
	    {
		    for(int j=i+1; j<=n; ++j)
	     	{
		    	m[i][j] = min(m[i][j-1], p[j]);
	    	}
	    }
	
	    int maxVal = 0;
	
    	for(int i=2; i<=n; ++i)
    	{
    		if(p[i]-m[1][i-1]>maxVal)
    		{
    			maxVal = p[i]-m[1][i-1];
    		}
    	}
	
    	for(int i=2; i<=n-2; ++i)
    	{
    		for(int j=i+2; j<=n; ++j)
    		{
    			if(p[i]-m[1][i-1]>0)
    			{
    				v[i][j] += p[i]-m[1][i-1];
    			}
    			if(p[j]-m[i+1][j-1])
    			{
    				v[i][j] += p[j]-m[i+1][j-1];
    			}
    			if(v[i][j]>maxVal)
    			{
    				maxVal = v[i][j];
    			}
    		}
    	}	
    	cout << maxVal << endl;
	}
	return 0;
}


3、问题:git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如:
base'<--base<--A<--A'
                 ^
                 | --- B<--B'
小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。
(假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0'或'1'组成,长度为n。matrix[i][j]=='1'当且仅当git树种第i个和第j个节点有连接。节点0为git树的根节点。)

输入例子:
[01011,10100,01000,10000,10000],1,2

输出例子:
1
思路:使用最短路径,存储下根节点到目标节点的路径,比较两条路径分离点。

int getSplitNode(vector<string> matrix, int indexA, int indexB)
{
	bool flag[101];
	int n = matrix.size();
	int path[101][101];
	int dist[101];
	int prev[101];
	stack<int> A, B;
	
	int NOPATH = 10000;
	
	for(int i=0; i<n; ++i)
	{
		for(int j=i; j<n; ++j)
		{
			if(matrix[i][j]=='0')
			{
				path[i][j] = NOPATH;
				path[j][i] = NOPATH;
			}
			else
			{
				path[i][j] = 1;
				path[j][i] = 1;
			}
		}
	}

	for(int i=1; i<n; ++i)
	{
		dist[i] = path[0][i];
		flag[i] = false;
		if(dist[i]<NOPATH)
		{
			prev[i] = 0;
		}
		else
		{
			prev[i] = -1;
		}
	}
	prev[0] = -1;
	dist[0] = 0;
	flag[0] = true;
	
	for(int i=1; i<n; ++i)
    {
        int tmp = NOPATH;
        int u = 0;

        for(int j=1; j<n; ++j)
            if((!flag[j]) && dist[j]<tmp)
            {
                u = j;            
                tmp = dist[j];
            }
        flag[u] = 1;   
  
        for(int j=1; j<n; ++j)
            if((!flag[j]) && path[u][j]<NOPATH)
            {
                int newdist = dist[u] + path[u][j];
                if(newdist < dist[j])
                {
                    dist[j] = newdist;
                    prev[j] = u;
                }
            }
    }
    

    while(indexA!=-1)
    {
    	A.push(indexA);
    	indexA = prev[indexA];
    }
  
    while(indexB!=-1)
    {
    	B.push(indexB);
    	indexB = prev[indexB];	
    }
    
    int result = -1;
    while(!A.empty()&&!B.empty())
    {
    	
    	int ta = A.top();
    	A.pop();
    	int tb = B.top();
    	B.pop();
    	if(ta==tb)
    	{
    		result = ta;
    	}
    	else
    	{
    		break;
    	}
    }
  
    return result;
}
另一种方法:使用深度搜索记录下每个节点的父节点及深度然后如下搜索(dep为深度信息,fa为父节点)

int a = indexA, b = indexB;
    while ( dep[a] > dep[b] ) {
        a = fa[a];
    }
    while ( dep[a] < dep[b] ) {
        b = fa[b];
    }
    while ( a != b ) {
        a = fa[a];
        b = fa[b];
    }

以上方法仅是自己的思路,想来还有更好更快的方法希望可以看到。


【2024-03-12】小米春招实习笔试两道编程题解 恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经。作者@TechGuide【全网同名】 阅读详情

相关推荐

小米2019秋招手机测试笔试题.docx

小米2019秋招手机测试笔试题小米2019秋招手机测试笔试题

小米秋招笔试题(强化基础)

D 选项和C 选项的区别是对-进行了转译,在集合里面-符号只有在作为区间的连接符(a-z,0-9)使用时才是元字符,在集合中直接使用就是-字符本身,\-等价于-,D选项正确。1、已知const arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'],下面可以获取数组最后一项的表达式有。解析:栈区存的是基本数据类型的变量和值,而引用数据类型存放在栈区的是变量和引用地址,它的值放在堆中。7-应用层、6-表示层、5-会话层、4-传输层、3-网络层、2-数据链路层、1-物理层。

蜗牛~~ 2915

小米2019秋招软件开发笔试题.docx

小米2019秋招软件开发笔试题

【小米笔试题】密码破译-C语言实现

题目 我们来做一个简单的密码破译游戏。破译的规则很简单,将数字转换为字母,1转化为a,2转化为b,依此类推,26转化为z。现在输入的密码是一串数字,输出的破译结果是该数字串通过转换规则所能产生的所有字符串。 输入: 多行数据,每行为一个数字串。 输出: 多行数据,没行对应输出通过数字串破译得到的所有字符串,并按照字符串顺序排列,字符串之间用单个空格 分隔,每行开头和结尾不允许有多余的空格。 样例输...

学益得的博客 2809

小米2019秋招系统软件开发工程师笔试题

小米2019秋招系统软件开发工程师笔试题

【5G演进】4G到5G演进之网络架构与协议栈

4G到5G演进之网络架构与协议栈

Learning makes me happy (0^◇^0) 5533

Perfect Rectangle

http://www.cnblogs.com/grandyang/p/5825619.html class Solution { public: bool isRectangleCover(vector>& rectangles) { unordered_set st; int min_x = INT_MAX, min_y = INT_MAX, max_x = INT_MIN, m

popvip44的博客 384

SPD5 集线器协议内容解析

​ 若不同SPD5 Hub后面的本地侧设备同时发送请求,则是22和23、24的混合过程,先通过LID裁决,再通过HID裁决,这里的LID是本地设备的,若LID一致,则看HID,由于SPD5 Hub的本地侧设备HID均为111,因此实际上是比较SPD5 Hub的HID,这个过程在前文提到,SPD5 Hub会转换HID。​ 若MR27[4]=1且MR27[3:0]=1,如果MR51[3:0]=1时,发送IBI,并且MR48[7]置1,将GETSTATUS CCC的待处理中断位[3:0]更新为0001。

weixin_50591344的博客 3861

C++开发笔试真题

时间复杂度,排序、编译过程、网络模型

学习-记录-分享创造价值 1561

【计算机视觉40例】案例08:石头剪刀布手势识别

计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。......

计算机视觉之光 2157

FPGA+CMV4000实战:从零搭建20fps成像系统的5个关键步骤(附避坑指南)

本文详细介绍了如何从零搭建基于FPGA和CMV4000传感器的20fps成像系统,涵盖硬件选型、SPI通信优化、LVDS数据采集、DDR2内存管理及系统集成等5个关键步骤。特别针对CMV4000传感器的SPI配置和高速数据处理的常见问题提供实用解决方案,帮助开发者避免常见陷阱,提升成像系统性能。

weixin_42628688的博客 428

名企笔试:2015小米暑期实习笔试题(二进制) 2017-04-05 算法爱好者

世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 C++源代码: // xiaomi problem 2017.04.05 // 2017.04.09 by wyj /* 名企笔试:2015小米暑期实习笔试题(二进制) 2017-

wyj_2016的博客 848

利用OrthoFinder做泛基因家族聚类分析

这条命令会将 Arabidopsis_thaliana.TAIR10.59_longest_trans.pep.fa 文件中的所有序列ID,去掉ID中的空格后面的部分,只保留 > 后第一个空格之前的基因ID,并将结果保存在 An1.fasta 文件中。muscle 是一种常用的多序列比对工具,用于基因组或蛋白质序列的比对。基因家族(Gene family),是来源于同一个祖先,由一个基因通过基因重复而产生两个或更多的拷贝而构成的一组基因,它们在结构和功能上具有明显的相似性,编码相似的蛋白质产物。

qq_64400864的博客 2756

小米2015笔试第二题

小米2015笔试第一题求两个多项式乘积的问题相信大家在中学时经常碰到,它是这样的一个问题: pa=an*x^n + an-1*x^(n-1) + … + a1*x + a0 pa=bm*x^m + bn-1*x^(m-1) + … + b1*x + b0 其中,an, an-1, …,a0, bm, bm-1, … ,b0 都是整数,范围[-10000, 10000]。0<=n, m <=10

u011610179的博客 479

代码复现3—VLN-CE

运行训练完后在 data文件下会自动生成一个“checkpoints”文件,文件下包含任务文件“seq2seq”,该文件下会包括训练出来的权重和评估结果。数据集下载完后路径提取:data/scene_datasets/mp3d/{scene}/{scene}.glb。注意这里下载的数据集并不是所有的matterport3d,只需要一部分,包含90个场景,大小压缩后约16G。在“eval”时,会在data文件下生成videos文件,里面存放的是可视化的轨迹视频。

qq_44100524的博客 3203

华为OD机试真题 新系统 9月16号 【园区基站节能部署规划】

华为OD机试真题 新系统【园区基站节能部署规划】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【园区基站节能部署规划】多语言题解。

qq_45776114的博客 361

字符串相关操作————2015小米笔试内容

这个是一道2015校招小米公司的笔试题,希望对大家有用~~~

求知欲 1270

手把手教你学SINULINK-- --Linear Transformer 模块

模块是 Simulink 中用于模拟理想变压器行为的重要工具。通过本文的详细介绍,希望你能更好地理解和使用模块。

MHD0815的博客 2615

2015小米校招技术类笔试题

一. 问答题 1. 大家对回文串不陌生吧?一个字符串从前看和从后看如果一样的话,就是回文串。比如“上海自来水来自海上”就是一个回文串。现在我们的问题来了,把一个数字看成字符串,问它是不是一个回文数?这么简单的题目对想要成为小米工程师的你来说肯定不是问题。不过提醒一下哦:时间复杂度和空间复杂度越低的算法,得分越高。 C++: bool isPalindromeNumber(long num)

古韦的专栏 1710

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

几个论坛上看到的2015小米笔试题

一、 题目描述  大家对回文串不陌生吧?一个字符串从前看和从后看如果一样的话,就是回文串,比如“上海自来水来自海上”就是一个回文串。现在我们的问题来了,把一个数字看成字符串,问它是不是一个回文数?时间复杂度和空间复杂度越低的算法,得分越高。 c++:      bool isPalindromeNumber(long num); java:      boolean isPal

佛曰不可说 1848

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

从2015小米笔试题看大厂实习必考基础:C/C++、操作系统与网络

在互联网技术面试中,无论技术栈如何变迁,操作系统、C/C++内存模型与网络协议始终是衡量工程师底子的核心标尺。从进程线程的同步互斥到TCP的状态流转,从指针内存布局到HTTP的会话机制,这些底层原理构成了技术能力的地基。掌握这些知识,不仅是为了应对笔试中的算法题与代码改错,更能帮助开发者在真实场景中定位线上故障、优化系统性能。对于准备大厂实习或初级岗位的求职者而言,理解小米等系统型公司的出题逻辑,可以更高效地构建知识体系。本文结合2015年小米暑期实习笔试题的考察方向,拆解其背后的能力要求,并延伸到小米OS

weixin_32060671的博客 358

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

2015小米笔试/阿里内推面试

小米笔试 1.给出一个数字,判断是不是回文串?时间和空间复杂度越小越好 我TM就是逗比,居然做题的时候偶数个直接返回False!!!!!!估计是没望了T T,好忧桑!!!!!!!!!!!!! 2.计算多项式的乘积。给出两个多项式,进行计算。 Input:(1,4),(5,3),(1,1),(-4,0) //(系数,指数) Output: //如上 3.给一堆人,进行排序,有些人有特殊要

菜逼成长录 1446

2015小米笔试题目(南京地区)

总得来说,小米的笔试题蛮有意思的,他首先说一suo

xyc310898673的专栏 1488

2015小米校园招聘笔试题

1.判断回文数字

MSchumacher的专栏 755

小米笔试题「小米大礼包」Python代码

本文首发于我的个人博客:Suixin’s Blog 前几天一位朋友问我一道小米的笔试编程题,一看题目,这么简单?直接遍历list再用if判断不就行了。事实证明我还是too naive,写了几句便写不下去了……WTF…… 话不多说,上题。 事实上,题目的本质为判断一个集合是否有子集之和等于一个固定的数字。可将问题分为两个子问题: 包含最后一个数字,循环其余N-1个数字判断是否等于M-set...

KEEP CODING 1052

java笔试题_研发工程师历年企业笔试真题汇总

研发工程师一般公司都会涵盖java工程师,c++工程师,如果有c#工程师,python工程师,golang工程师等也会包括在内,当然,有的公司运维类的,测试类的也考这个试卷,具体不一定~~阿里巴巴2015研发工程师A笔试卷_阿里巴巴笔试题_牛客网 阿里巴巴2015研发工程师A笔试卷腾讯2014校招研发工程师B笔试卷_腾讯笔试题_牛客网 腾讯2014校招研发工程师B笔试卷百度2011研发工程师笔试卷...

weixin_39875028的博客 704
上一篇: 条款27:尽量少做转型操作
下一篇: 2014WAP校园招聘笔试题
知行且执行
博客等级 码龄14年 38粉丝 73原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值