滴滴0913笔试
第一题,每个玩具有一个电量值,你有一块电池总电量为m,现在要选几个连续的玩具,且这几个玩具的电量总和不能超过m,求能最多选几个玩具?
滑动窗口题,初始left和right为0,right不断+1,判断right和left之间的玩具电量和是否大于m,若大于,则left+1,直到电量和小于m,更新res变量max(res,right-left+1),这里电量和可以用前缀和做,也可以每次right或者left变化的时候动态维护。
第二题,有n首歌各自有自己的排名1~n,输入n行,每行两个数,op,x,op为1则表示排名为x的歌排名应该变低,op为-1则表示排名为x的歌排名应该变高,op为0则表示排名不变,现在问能否根据这n行输入构造出一个满足要求的歌排名?
开一个n+1的bool数组occupy,occupy[i]表示排名i被占用了,先根据输入按照x排序,遍历一遍处理op=0的,对应的accupy[x]=True即可,再遍历一遍处理op=1的,从前往后遍历occupy,如果有False的,占用掉,如果找不到False,则返回“NO”,再遍历一遍处理op=-1的,从当前位置往后遍历找有没有False的。
滑动窗口题,初始left和right为0,right不断+1,判断right和left之间的玩具电量和是否大于m,若大于,则left+1,直到电量和小于m,更新res变量max(res,right-left+1),这里电量和可以用前缀和做,也可以每次right或者left变化的时候动态维护。
第二题,有n首歌各自有自己的排名1~n,输入n行,每行两个数,op,x,op为1则表示排名为x的歌排名应该变低,op为-1则表示排名为x的歌排名应该变高,op为0则表示排名不变,现在问能否根据这n行输入构造出一个满足要求的歌排名?
开一个n+1的bool数组occupy,occupy[i]表示排名i被占用了,先根据输入按照x排序,遍历一遍处理op=0的,对应的accupy[x]=True即可,再遍历一遍处理op=1的,从前往后遍历occupy,如果有False的,占用掉,如果找不到False,则返回“NO”,再遍历一遍处理op=-1的,从当前位置往后遍历找有没有False的。
全部评论
第二题用两个list存储排名,然后排序,互相比较,这个方法为什么不行啊,佬能解释一下吗?
if (down.size()==up.size()){
boolean flag = true;
for (int k = 0;k<up.size();k++){
if (up.get(k)<down.get(k)){
flag = false;
break;
}
}
if (Math.random()>0.5){
out.println(flag ? "YES":"NO");
}
}else {
out.println("NO");
}
力扣上有没有类似的题目呢 感觉有点懵
相关推荐
10-22 20:35
深圳大学 商务经理 点赞 评论 收藏
分享