2021 vivo校招提前批笔试解析

  • 1、种花问题
    • 情况1:排除端点
    • 情况2:考虑端点
    • 情况3:花园大小只有1
  • 2、质量测试
  • 3、合并流水线

题目不能完整的记下来,目测后面vivo会把题目放到牛客上,这里先给一些解析

1、种花问题

刚发现原来是Leetcode上的605题

假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1
输出: True
示例 2:输入: flowerbed = [1,0,0,0,1], n = 2
输出: False
注意:数组内已种好的花不会违反种植规则。
输入的数组长度范围为 [1, 20000]。
n 是非负整数,且不会超过输入数组的大小。

刚开始我以为是动态规划问题,浪费了很多时间,后来发现是一个找规律的问题。

解题思路:

情况1:排除端点

排除端点外,我们假设可以种花的区域被花包围,也就是中间连续的0被1包围。
像下面这种情况,显然是不能种花的

1 0 0 1;

而这种情况:

1 0 0 0 1 可种1朵花
1 0 0 0 0 1 可种1朵花
1 0 0 0 0 0 1 可种2朵花
1 0 0 0 0 0 0 1 可种2朵花
1 0 0 0 0 0 0 0 1 可种3朵花
1 0 0 0 0 0 0 0 0 1 可种3朵花

不难发现,每隔着2个0,就会有多种一朵花的机会。

公式就很好推算了,中间有n个0时,可以种(n-1)/2朵花

情况2:考虑端点

当某个端点为0时,我们可以多种一朵花
1 0 0 可种1朵花
1 0 0 0 可种1朵花
1 0 0 0 0 可种2朵花
1 0 0 0 0 0 可种2朵花
1 0 0 0 0 0 0 可种3朵花
1 0 0 0 0 0 0 0 可种3朵花

情况3:花园大小只有1

当花园大小为1时,我们不能得到一个区间,我们只有一个点,对这个情况要特殊处理

综上所述,我们可以得到以下代码

    public static void main(String[] args) {Scanner in=new Scanner(System.in);int len=in.nextInt();int plant[]=new int[len];int curr=0;while (curr<len){plant[curr++]=in.nextInt();}slove(plant);}private static void slove(int nums[]){if(nums.length==1){int x=nums[0]==0?1:0;System.out.println(x);return;}int slow=0;//0int quick=0;//1int count=0;while (slow<nums.length&&quick<nums.length){while (slow<nums.length&&nums[slow]==1){slow++;}quick=slow;while (quick<nums.length&&nums[quick]==0){quick++;}if(quick-slow>=3){count+=counter(quick-slow);}//考虑端节点if((slow==0||quick==nums.length)&&(quick-slow>=2)){count++;}slow=quick;}System.out.println(count);}//计算两个空白字符之间的private static int counter(int sub){return (sub-1)/2;}

2、质量测试

题目大意是摔手机,跌落测试来测试手机质量。

这个题就不多说了,一道经典的Leetcode题:Leetcode-887

3、合并流水线

题目大意:
输入:n表示有几条流水线
输出:按照升序排列的,合并后的流水线

很简单,是一个排序问题。不过本题目中要求使用链表。而且源码中还留着一个静态函数,用于合并新输入的链表。

解题思路:使用小顶堆对输入的几条流水线合并,然后弹出,合并到一个流水线中。然后在那个合并函数那里,对两个链表重新合并,按照从小到达插入

public class Main {private static ListNode dummyNode=new ListNode(-1);private static ListNode currNode=dummyNode;public static void main(String[] args) {currNode=dummyNode;List<String> lines = new ArrayList<>();Scanner scanner = null;try {scanner = new Scanner(System.in);int totalLine=Integer.valueOf(scanner.nextLine());while (totalLine>0) {lines.add(scanner.nextLine());totalLine--;// write your code here}PriorityQueue<Integer> queue=new PriorityQueue<>();for (int i=0;i<lines.size();i++){String[] nums=lines.get(i).split(" ");for(String num:nums){queue.offer(Integer.valueOf(num));}}while (queue.isEmpty()==false){currNode.next=new ListNode(queue.poll());currNode=currNode.next;}} finally {if (scanner != null) {scanner.close();}}// TODO outputListNode curr=dummyNode.next;while (curr!=null){if(curr.next==null){System.out.print(curr.val);}else {System.out.print(curr.val+" ");}curr=curr.next;}}static class ListNode {int val;ListNode next;ListNode(int x) {val = x;}}private static ListNode mergeNodes(ListNode head ) {dummyNode=merge(dummyNode.next,head);return dummyNode.next;}private static ListNode merge(ListNode n1,ListNode n2){if(n1==null||n2==null){return n1==null?n2:n1;}ListNode newDummy=new ListNode(-1);ListNode curr=newDummy;while(n1!=null&&n2!=null){int val=n1.val;if(n1.val>n2.val){val=n2.val;n2=n2.next;}else {n1=n1.next;}curr.next=new ListNode(val);curr=curr.next;}curr.next=n1==null?n2:n1;return newDummy.next;}
}

vivo给的题目中,代码很多,所以我这里也写得比较多。

2021 vivo校招提前批笔试解析相关推荐

  1. VIVO校招提前批算法工程师笔试题目 2019/6/4

    总共有三道题: 很简单的一道题,给A,B两个数组,输出出现在A中而没有出现在B中的元素,输出元素前后顺序不变,遍历一遍就OK了. 反转链表的第M个至第N个元素 0-1 背包 第一题 第一题很简单,直接 ...

  2. C语言vivo笔试题目及答案,vivo2020笔试真题,vivo2020校招提前批火热进行中!

    原标题:vivo2020笔试真题,vivo2020校招提前批火热进行中! vivo2021校园招聘提前批 简历投递截止时间:2020年6月6日12:00 现在,你可以登录vivo校园招聘官方网站 ht ...

  3. VIVO 提前批笔试及面试经历

    VIVO大法好 Vivo提前批笔试及面试复盘 首先是笔试 然后是面试环节: 一面,技术面: 然后是HR面 总结 Vivo提前批笔试及面试复盘 首先是笔试 时间60分钟,三道编程题,不允许跳出网页使用本 ...

  4. 2021届招银网络科技提前批笔试

    2021届招银网络科技提前批笔试 写在前面: 第一次参加笔试,结果不重要,就当作是积累经验啦~ 有一些坑记录下来,后面的人看到也可以注意一下: 1.每部分题目是不能往回翻页的,就是说你不能想着做完了后 ...

  5. 大疆2019校招提前批机器学习算法工程师在线笔试题目回忆版

    最后还涉及到两道16分的在线编程题目,但是我忘记了,故没有列出来,望大家原谅2333. 大疆2019年校招提前批机器学习算法工程师B卷题目回忆版 1 考察关于各种激活函数 sigmoid.tanh.r ...

  6. 卷起来了!校招提前批爆发期!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 7月正式进入很多公司的2023届校招提前批启动阶段!据Amusi了解,目前腾讯(技术大咖).字节.百度等60 ...

  7. 8月!校招提前批的黄金期和末尾期!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 8月已进入校招提前批的黄金期和末尾期!校招时间表如下图所示(建议收藏): 目前字节.百度等100多家公司都已 ...

  8. 多益网络2022届校招提前批全面启动【免筛推荐码QEAQU】

    多益网络2022届校招提前批全面启动![免筛推荐码QEAQU] 互联网百强企业:中国十大游戏研发商和运营商之一 [提前批优势]直通笔试!不影响正式批次,多一次投递机会 [岗位]策划类.程序类.美术类. ...

  9. 大量CV职位!奥比中光2020届校招提前批内推启动!

    点击我爱计算机视觉标星,更快获取CVML新技术 内 · 推 奥比中光2020届校园招聘 提前批[内部推荐] !!!正式启动!!! 快人一步锁定offer 海投的迷茫.宣讲会的焦灼.双选会的拥挤 通通与 ...

最新文章

  1. 过去一个月发生了什么,C++再次真香了吗?
  2. python入门教程完整版(懂中文就能学会)-Python入门教程完整版(懂中文就能学会)...
  3. c语言扫描图片的坐标,tc 如何在指定坐标处 输出bmp图片??
  4. 笔试算法题(28):删除乱序链表中的重复项 找出已经排好序的两个数组中的相同项...
  5. Python+KNN算法判断单词相似度小案例
  6. python decorator. decorator_decorator在Python中的作用
  7. JavaScript中调皮的undefined
  8. ORACLE 指令基础学习
  9. linux中ftp禁止匿名,linux下禁止root和匿名用户登录ftp
  10. html怎么设置火狐ie兼容模式,火狐浏览器兼容模式如何设置?火狐浏览器兼容模式设置方法分享...
  11. 工具1:DNS隧道检测工具BotDAD
  12. 选择排序之简单选择排序
  13. python学习之os模块
  14. 硬件笔记(2)---- 贴片电容材质NPO与X7R、X5R、Y5V、Z5U的区别
  15. Beta阶段事后诸葛亮分析
  16. bootstrap 元素
  17. pandas学习task02 pandas基础
  18. 从头开始构建,DeepMind新论文用伪代码详解Transformer
  19. 黑链/暗链/防K黑链代码
  20. C语言创建24位真彩色位图

热门文章

  1. 中国电子信息产业发展研究院、德国弗劳恩霍夫协会 IOSB-INA、美国通用智能系统和技术公司合作谅解备忘录签约仪式在京举行
  2. 大数据新常态 读书笔记(一)
  3. 甲骨文公司,Sun公司
  4. 如何在不同的 ViewController 之间传递信息
  5. 天干地支计算公式_什么是天干地支?天干地支有哪几个?计算方法是什么?
  6. JavaScript中 queue(队列)的应用与实现
  7. klt跟踪源码 matlab,Kanade-Lucas-Tomasi(KLT)进行目标跟踪
  8. python加载数据集卡住 dmesg报错Nvidia xid31
  9. yum 安装oraclejdk_linux服务器上安装jdk的两种方法(yum+下载包)
  10. python 水仙花