乐视笔试算法题美团算法笔试题
今天参加了乐视的校招笔试题有一道以前很熟悉的一道题记录一下
备注:今天乐视笔试好多图的选择题和线程间同步的方式一道选择题(上次总结过)
给定一个无序的整数数组,怎么找到第一个大于0,并且不在此数组的整数。比如[1,2,0]返回3,[3,4,-1,1]返回2,[1, 5, 3, 4, 2]返回6,[100, 3, 2, 1, 6,8, 5]返回4。要求使用O(1)空间和O(n)时间。
这道题目初看没有太好的思路,但是借鉴下《白话经典算法系列之十 一道有趣的GOOGLE面试题》这篇文章,我们不发现使用“基数排序”正好可以用来解决这道题目。
以{1, 3, 6, -100, 2}为例来简介这种解法:
从第一个数字开始,由于a[0]=1,所以不用处理了。
第二个数字为3,因此放到第3个位置(下标为2),交换a[1]和a[2],得到数组为{1, 6, 3, -100, 2}。由于6无法放入数组,所以直接跳过。
第三个数字是3,不用处理。
第四个数字是-100,也无法放入数组,直接跳过。
第五个数字是2,因此放到第2个位置(下标为1),交换a[4]和a[1],得到数组为{1, 2, 3, -100, 6},由于6无法放入数组,所以直接跳过。
此时“基数排序”就完成了,然后再从遍历数组,如果对于某个位置上没该数,就说明数组缺失了该数字。如{1, 2, 3, -100, 6}缺失的就为4。
这样,通过第i个位置上就放i的“基数排序”就顺利的搞定此题了。
代码也非常好写,不过在交换两数时要注意判断下两个数字是否相等,不然对于像{1, 1, 1}这样的数据会出现死循环。
完整的代码如下:
- //【白话经典算法系列之十六】“基数排序”之数组中缺失的数字
- //byMoreWindows(http://blog.csdn.net/MoreWindows)
- //欢迎关注http://weibo.com/morewindows
- #include<stdio.h>
- voidSwap(int&a,int&b)
- {
- intc=a;
- a=b;
- b=c;
- }
- intFindFirstNumberNotExistenceInArray(inta[],intn)
- {
- inti;
- //类似基数排序,当a[i]>0且a[i]<N时保证a[i]==i+1
- for(i=0;i<n;i++)
- while(a[i]>0&&a[i]<=n&&a[i]!=i+1&&a[i]!=a[a[i]-1])
- Swap(a[i],a[a[i]-1]);
- //查看缺少哪个数
- for(i=0;i<n;i++)
- if(a[i]!=i+1)
- break;
- returni+1;
- }
- voidPrintfArray(inta[],intn)
- {
- for(inti=0;i<n;i++)
- printf("%d",a[i]);
- putchar('\n');
- }
- intmain()
- {
- printf("【白话经典算法系列之十六】“基数排序”之数组中缺失的数字\n");
- printf("--byMoreWindows(http://blog.csdn.net/MoreWindows)--\n");
- printf("--http://blog.csdn.net/morewindows/article/details/12683723--\n\n");
- constintMAXN=5;
- //inta[MAXN]={1,2,3,4,7};
- //inta[MAXN]={1,3,5,4,2};
- inta[MAXN]={2,-100,4,1,70};
- //inta[MAXN]={2,2,2,2,1};
- PrintfArray(a,MAXN);
- printf("该数组缺失的数字为%d\n",FindFirstNumberNotExistenceInArray(a,MAXN));
- return0;
- }
乐视笔试算法题美团算法笔试题相关推荐
- java2018笔试基础题_java基础笔试题
java基础加强 考查的知识点:junit测试 1.下面注解中,哪项是定义一个Junit单元测试的方法()(难度A) A.@Test B.@Ignor C.@Before D.@After 考查的知识 ...
- 算法与数据结构——网易笔试题(一)
算法题 13:二叉堆(网易2016实习研发工程师) 思路: ********************************************************************** ...
- 【美团校招笔试题】去除字符串首尾空格,中间多个空格只保留一个
要求: 这是本人参加美团校招在线考试笔试题,如果此行为违反了美团校招笔试题商业保密性,请与本人联系. 思路:用一个while循环扫描整个字符串,用pStart字符指针指向整个字符串首地址,如果遇到首部 ...
- 美团2021笔试题(第十场)-公司食堂
美团2021笔试题(第十场)-公司食堂 题目 小美和小团所在公司的食堂有N张餐桌,从左到右摆成一排,每张餐桌有2张餐椅供至多2人用餐,公司职员排队进入食堂用餐.小美发现职员用餐的一个规律并告诉小团:当 ...
- python任务调度系统面试题_经典算法题 :任务调度算法(美团校招笔试题)
小贴士:返回上一级搜索"算法题"挑战更多题目. 备注: 1.不定期将从留言区选出认真答题的1名朋友,赠与书籍<算法详解(卷1)>一本(兑奖方法跟获奖者私下沟通) 请留言 ...
- 转:乐视秒杀:每秒十万笔交易的数据架构解读
随着乐视硬件抢购的不断升级,乐视集团支付面临的请求压力百倍乃至千倍的暴增.作为商品购买的最后一环,保证用户快速稳定地完成支付尤为重要.所以在2015年11月,我们对整个支付系统进行了全面的架构升级,使 ...
- 算法与数据结构——巨人网络笔试题
算法题 176:生日问题(巨人网络2017校园招聘笔试题) 题目: 一个老师的生日是m月n日,他将m告诉了小林,n告诉了小二,小林说如果我不知道小二肯定也不知道,小二说本来我不知道但是你这么一说我就知 ...
- Java构造字符串算法题_LeetCode算法题-Repeated Substring Pattern(Java实现)
这是悦乐书的第236次更新,第249篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第103题(顺位题号是459).给定非空字符串检查是否可以通过获取它的子字符串并将子字符 ...
- 校招笔试C语言,校招c ++笔试题汇总
①链表反转 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题, 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后 ...
最新文章
- Sco Unixware 7.1.3企业版服务器安装视频教程
- 网站打开速度变慢可以从哪些方面进行分析呢?
- markdownpad2 html渲染组件出错_Day68 Django forms组件
- 请求服务器 显示非法访问,访问负载均衡出现访问host非法
- 怎样能用计算机打出表白数字,怎么用数字表白?盘点数字表白暗语
- double类型最大值_Java后端精选基础教程:Java 中的基本数据类型「连载 6」
- OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()
- 2021高考成绩查询大连,2021年大连高考各高中成绩及本科升学率数据排名及分析...
- java操作浏览器_java selenium 操作浏览器实例
- 动手写个数字输入框2:起手式——拦截非法字符
- BootStrap的基本使用
- python服务器查看文件更改记录,python 查看远程服务器上的文件
- 铁路售票系统_高铁铁路运营客票乘务,自动售检票务实训的诞生背景
- JCam2 v1.6.0 USB摄像头工具全新发布及使用详解
- 如何高效率学习PMP?
- 紫光华宇拼音输入法使用技巧
- 计算机无法启动bios,笔记本进不了bios的解决方法
- java jframe 设置背景图片_为jframe窗口设置背景图片
- java计算机毕业设计会议查询系统源程序+mysql+系统+lw文档+远程调试
- win7怎么修改系统语言
热门文章
- Sprite Kit 移动精灵
- 联想g40改Android,求大神帮忙,联想g40如何改win7系统?
- 运行npm install时会一直加载转圈
- Android肝帝战纪之Fragmentation的使用(单Activity+多Fragment设计)
- repo init 下载代码error.GitError: manifests ls-remote: usage: git ls-remote
- 三大功能护航,Amazfit跃我 PowerBuds Pro正式发售
- 机器学习必看书籍和视频汇总
- 说一说Qpython在Android手机上的应用(二)
- 每日一题4.12.1
- 发热内衣的优势在哪里