版权声明:本文为博主原创文章,遵循 CC 4.0 BY版权协议,转载请附上原文出处链接和本声明。
博主于2020.4月初投了字节跳动上海创新业务后端开发实习岗(Java方向),并且在2020.5初拿到了客户端的实习offer,下面分享一下此次技术面试的相关内容。字节跳动上海创新业务(2021届实习生)三轮技术面总结
按各位前辈的说法,字节跳动的内推一般是没有笔试的,但是我还是有。。。最后发现原来我是直接在字节跳动官网投递,内推是在字节跳动内推官网,我还是太年轻了。。。
笔试我现在只记得一道题,总共有四道题,当时AC了三道。不过已经得了一个月,如果后面想起来了,再来补吧。
1、尽量使用优惠卷
题干:
给你一个优惠卷数组、准备购买商品的价格数组,并且规定每件商品只能使用金额不大于自身价格的优惠卷(否则商场还得给你找零),优惠卷可以重复使用,但是一件商品只能使用一张优惠卷。现在要求你计算使用优惠卷后最小的总价。
输入示例:
每个测试用例的第一行是优惠卷的数量,第二行是各优惠卷金额,第三行是商品数量,第四行是各件商品的价格。
312342415
思路分析:
水题一道,显然每件商品应该寻找≤自身价格最大的金额的优惠卷。以我阅题无数的道行来看,这道题的关键是优化查找,不能每件商品都去搜一遍优惠卷数组,时间复杂度为O(m*n)(m、n分别为优惠卷、商品价格数组的长度)。
我们首先对两个数组进行升序排列,快速排序、堆排序、归并排序随便撸一个,时间消耗O(nlogn + mlogm)。然后使用两个指针,分别从优惠卷、商品价格数组头部开始扫描。
这要计算的理由比较简单,假设我们计算price[i]用了某张最适合的优惠卷coupon[j],那么计算price[i + 1]用的优惠卷的金额必然不会比coupon[j]小,因此只要后移ptr1指针往后找即可。所以时间复杂度在O(m+n)级别。
那么排序+计算总价格的时间复杂度在O(nlogn + mlogm + m + n)级别。这道题测试数据还是比较多的,我最开始写的是希尔排序,时间复杂度与步长有关,一般认为时间复杂度为O(n^(1.3—2))级别,没有通过,后面修改为快排才AC。
2、其它不记得了。。。