昨天携程惨败,今天美团惨败.....刷题太少根本不够应对笔试的,美团今年的笔试是5道编程,目测两道leetcode简单 ,两道中等,一道困难。本文纯属记录一下自己的菜鸡笔试历程,如果对某个题目有好的解法,请一定评论私信指教一下!感谢!
两道简单的感觉自己都做出来了,但是一个只能通过部分测试样例,一个超时了,剩下的题没有做.....感觉这两个企业笔试题都喜欢考动态规划,这快接下来得好好看看了,之前没怎么做过这种题。
关于第一题,图片太大,上传不上来,我就只写文字了。
给出一个序列包含n个正整数的序列A,你可以从中删除若干个数,使得剩下的数字中的最大值和最小值之差不超过x,
请问最少删除多少个数字。
输入第一行仅包含两个正整数n和x,表示给出的序列的长度和给定的正整数。(1<=n<=1000,1<=x<=10000)
接下来一行有n个正整数,即这个序列,中间用空格隔开。(1<=a_i<=10000)
输出仅包含一个正整数,表示最少删除的数字的数量。
输入
5 2
2 1 3 2 5
输出
1
这道题可能是我想错了,我首先将数组进行排序,然后用了两个指针left=0和right=length-1从数组的两端向里面移动,如果当前的arr[left+1]-arr[left]>arr[right]-arr[right-1]那么说明移动left比移动right更优,直到arr[right]-arr[left]<=x结束循环。
这样应该是错了,看到牛客有评论是暴力寻找,i从0到arr.length-1每个元素找到能满足arr[j]-arr[i]<=x的最大j值,O(n2)的时间复杂度,待会我进行code尝试一下。
上面这道题可以去了解一下尺取法。
https://www.nowcoder.com/discuss/180336?type=101
https://zhuanlan.zhihu.com/p/61564531
从上面这篇知乎得知,这个题应该和leetcode209是同种解法
第二题(图从大佬那里偷来的)
这道题我的想法是这样的,
输入数组为arr,烙印数steps=0,
先对输入的数组中所有的数进行求和得到sum,steps =(m/sum)*arr.length,m=m%sum
用LinkedList记录从1,2...arr.length-1个数,while(m>0)条件下使用迭代器遍历list,当m>=arr[i]时,m-=arr[i],steps++,当m<arr[i]时,表示当前拥有的法力值永远无法再在i位置留下烙印,将i在list中移除掉。关键代码如下
public static long StepCountFunc(int[] arr,long n){
// int canLeavePower =0;
long steps=0;
long sum =0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
if(n>=sum){
steps=(n/sum)*arr.length;
n=n%sum;
}
LinkedList<Integer> list =new LinkedList<>();
for(int k=0;k<arr.length;k++){
list.add(k);
}
Iterator<Integer> iterator;
while (n>0){
iterator= list.iterator();
while (iterator.hasNext()){
int index = iterator.next();
if(n>=arr[index]){
n=n-arr[index];
steps++;
}else {
iterator.remove();
}
}
if(list.size()==0) return steps;
}
return steps;
}
检查代码我好像知道为什么只能AC27%了,主函数里我是这么调用的.....21是测试样例的,我给写死了,妈个鸡哦....被自己蠢死。
long steps = StepCountFunc(nums,21);
System.out.println(steps);
刚看了牛客某acm大佬的思路,原博如下
https://jkchen.blog.csdn.net/article/details/105279440
大佬的代码我完全没看懂,C比Java可读性差太多了/(ㄒoㄒ)/~~,关键是这句,不能整圈(sum>m)的情况,显然某个前缀的sum已经>m了,所以我们二分这个前缀(动态前缀和使用树状数组维护),将第一个大于m的前缀的那个位置删掉。
我大致理解思想了,可我写不出来.....
第三题是动态规划,再引用一下这位大佬的博客
https://blog.csdn.net/jk_chen_acmer/article/details/105279577
概率dp https://blog.csdn.net/wuxiaowu547/article/details/81835800
后面的再总结吧,现在的我也不会做....这两天笔试真的受打击了,得好好刷题才行了,加油吧。