今天参加了乐视的校招笔试题有一道以前很熟悉的一道题记录一下

备注:今天乐视笔试好多图的选择题和线程间同步的方式一道选择题(上次总结过)

给定一个无序的整数数组,怎么找到第一个大于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}这样的数据会出现死循环。

完整的代码如下:

[cpp] view plain copy
  1. //【白话经典算法系列之十六】“基数排序”之数组中缺失的数字
  2. //byMoreWindows(http://blog.csdn.net/MoreWindows)
  3. //欢迎关注http://weibo.com/morewindows
  4. #include<stdio.h>
  5. voidSwap(int&a,int&b)
  6. {
  7. intc=a;
  8. a=b;
  9. b=c;
  10. }
  11. intFindFirstNumberNotExistenceInArray(inta[],intn)
  12. {
  13. inti;
  14. //类似基数排序,当a[i]>0且a[i]<N时保证a[i]==i+1
  15. for(i=0;i<n;i++)
  16. while(a[i]>0&&a[i]<=n&&a[i]!=i+1&&a[i]!=a[a[i]-1])
  17. Swap(a[i],a[a[i]-1]);
  18. //查看缺少哪个数
  19. for(i=0;i<n;i++)
  20. if(a[i]!=i+1)
  21. break;
  22. returni+1;
  23. }
  24. voidPrintfArray(inta[],intn)
  25. {
  26. for(inti=0;i<n;i++)
  27. printf("%d",a[i]);
  28. putchar('\n');
  29. }
  30. intmain()
  31. {
  32. printf("【白话经典算法系列之十六】“基数排序”之数组中缺失的数字\n");
  33. printf("--byMoreWindows(http://blog.csdn.net/MoreWindows)--\n");
  34. printf("--http://blog.csdn.net/morewindows/article/details/12683723--\n\n");
  35. constintMAXN=5;
  36. //inta[MAXN]={1,2,3,4,7};
  37. //inta[MAXN]={1,3,5,4,2};
  38. inta[MAXN]={2,-100,4,1,70};
  39. //inta[MAXN]={2,2,2,2,1};
  40. PrintfArray(a,MAXN);
  41. printf("该数组缺失的数字为%d\n",FindFirstNumberNotExistenceInArray(a,MAXN));
  42. return0;
  43. }
美团上机笔试题:算法
1给你1元5元10元50元100元面值的纸币,组成n元的所有组合方式个数
2无序数组随机去取两个,求两个数之和不超过limit的最大值是

乐视笔试算法题美团算法笔试题相关推荐

  1. java2018笔试基础题_java基础笔试题

    java基础加强 考查的知识点:junit测试 1.下面注解中,哪项是定义一个Junit单元测试的方法()(难度A) A.@Test B.@Ignor C.@Before D.@After 考查的知识 ...

  2. 算法与数据结构——网易笔试题(一)

    算法题 13:二叉堆(网易2016实习研发工程师) 思路: ********************************************************************** ...

  3. 【美团校招笔试题】去除字符串首尾空格,中间多个空格只保留一个

    要求: 这是本人参加美团校招在线考试笔试题,如果此行为违反了美团校招笔试题商业保密性,请与本人联系. 思路:用一个while循环扫描整个字符串,用pStart字符指针指向整个字符串首地址,如果遇到首部 ...

  4. 美团2021笔试题(第十场)-公司食堂

    美团2021笔试题(第十场)-公司食堂 题目 小美和小团所在公司的食堂有N张餐桌,从左到右摆成一排,每张餐桌有2张餐椅供至多2人用餐,公司职员排队进入食堂用餐.小美发现职员用餐的一个规律并告诉小团:当 ...

  5. python任务调度系统面试题_经典算法题 :任务调度算法(美团校招笔试题)

    小贴士:返回上一级搜索"算法题"挑战更多题目. 备注: 1.不定期将从留言区选出认真答题的1名朋友,赠与书籍<算法详解(卷1)>一本(兑奖方法跟获奖者私下沟通) 请留言 ...

  6. 转:乐视秒杀:每秒十万笔交易的数据架构解读

    随着乐视硬件抢购的不断升级,乐视集团支付面临的请求压力百倍乃至千倍的暴增.作为商品购买的最后一环,保证用户快速稳定地完成支付尤为重要.所以在2015年11月,我们对整个支付系统进行了全面的架构升级,使 ...

  7. 算法与数据结构——巨人网络笔试题

    算法题 176:生日问题(巨人网络2017校园招聘笔试题) 题目: 一个老师的生日是m月n日,他将m告诉了小林,n告诉了小二,小林说如果我不知道小二肯定也不知道,小二说本来我不知道但是你这么一说我就知 ...

  8. Java构造字符串算法题_LeetCode算法题-Repeated Substring Pattern(Java实现)

    这是悦乐书的第236次更新,第249篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第103题(顺位题号是459).给定非空字符串检查是否可以通过获取它的子字符串并将子字符 ...

  9. 校招笔试C语言,校招c ++笔试题汇总

    ①链表反转 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题, 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后 ...

最新文章

  1. Sco Unixware 7.1.3企业版服务器安装视频教程
  2. 网站打开速度变慢可以从哪些方面进行分析呢?
  3. markdownpad2 html渲染组件出错_Day68 Django forms组件
  4. 请求服务器 显示非法访问,访问负载均衡出现访问host非法
  5. 怎样能用计算机打出表白数字,怎么用数字表白?盘点数字表白暗语
  6. double类型最大值_Java后端精选基础教程:Java 中的基本数据类型「连载 6」
  7. OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()
  8. 2021高考成绩查询大连,2021年大连高考各高中成绩及本科升学率数据排名及分析...
  9. java操作浏览器_java selenium 操作浏览器实例
  10. 动手写个数字输入框2:起手式——拦截非法字符
  11. BootStrap的基本使用
  12. python服务器查看文件更改记录,python 查看远程服务器上的文件
  13. 铁路售票系统_高铁铁路运营客票乘务,自动售检票务实训的诞生背景
  14. JCam2 v1.6.0 USB摄像头工具全新发布及使用详解
  15. 如何高效率学习PMP?
  16. 紫光华宇拼音输入法使用技巧
  17. 计算机无法启动bios,笔记本进不了bios的解决方法
  18. java jframe 设置背景图片_为jframe窗口设置背景图片
  19. java计算机毕业设计会议查询系统源程序+mysql+系统+lw文档+远程调试
  20. win7怎么修改系统语言

热门文章

  1. Sprite Kit 移动精灵
  2. 联想g40改Android,求大神帮忙,联想g40如何改win7系统?
  3. 运行npm install时会一直加载转圈
  4. Android肝帝战纪之Fragmentation的使用(单Activity+多Fragment设计)
  5. repo init 下载代码error.GitError: manifests ls-remote: usage: git ls-remote
  6. 三大功能护航,Amazfit跃我 PowerBuds Pro正式发售
  7. 机器学习必看书籍和视频汇总
  8. 说一说Qpython在Android手机上的应用(二)
  9. 每日一题4.12.1
  10. 发热内衣的优势在哪里