饿了么笔试20250321

一、送分

二、给一个小写字母的字符串,如果两个不同位置的字符同时满足:位置的奇偶性相同,字典差距不超过g ('a' 'c' 差距2),则是xx对,求共有多少对这样的数。(通过90%)

用两个长26的数组分别记录奇数时和偶数时各个字母有多少个。

然后分别双指针i,j遍历,

i=0;i<26;i++

j=i,j<26&&(j-i)<=g;j++

if j==i:

ans+=(count[i]*(count[i]-1))/2

else:

ans+=count[i]*count[j]

三、接雨滴(麻了,写了一个小时0%,裂开)

一个二维平面,有

小笨只能在x轴上移动,初始在(k,0)处,

他有一个只能容纳一滴雨水的桶,t=0时有n滴雨水,位置为(x,y),以1格每秒匀速下落,即1s后位置变为(x,y-1),

(k,0)处有一个传送器,能随时传回去同时把收集好的雨水倒入该处。

求小笨能接住所有雨水的最小速度v,

如果不能接住所有雨水,返回-1.一个雨滴在(x,0)处时只要小笨也在x位置则也能接住

//自测对的,但是提交0%,有疑问,速度不应该是浮点数吗

//思路大概是先按时间排序,遍历水滴,

//因为每次接完都要回(k,0)处,所以看看下个水滴的距离除以时间和v比起咋样就行。

import java.util.*;

class Point{

int x;

int y;

Point(int x,int y){

this.x=x;

this.y=y;

};

}

// 注意类名必须为 Main, 不要有任何 package xxx 信息

public class Main {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

//T组测试

int T = in.nextInt();

int n,k,x,y;

for(int group=0;group<T;group++){

n = in.nextInt();

k = in.nextInt();

Point[] points=new Point[n];

for(int i=0;i<n;i++){

x=in.nextInt();

y=in.nextInt();

points[i]=new Point(x,y);

}

Arrays.sort(points,(o1,o2)->{

if(o1.y==o2.y)

return o1.x-o2.x;

else

return o1.y-o2.y;

});

//double v=0;

int v=0;

int nowTime=0;

for(int i=0;i<n;i++){

//当前时间,如果当前时间等于下一个雨滴的时间,且下一个水滴横坐标位置不在k处,则接不到

if(nowTime==points[i].y){

if(k!=points[i].x){

v=-1;

break;

}

}

else{

//当前速度如果接不到,提升速度

if((points[i].y-nowTime)*v<Math.abs(points[i].x-k))

{

v=Math.abs(points[i].x-k)/(points[i].y-nowTime);

//v不应该是是浮点数吗(x,y) 假设只有一个点(k+1,3),v>=1/3

if((Math.abs(points[i].x-k)%(points[i].y-nowTime))!=0)

v++;

}

//更新时间

nowTime=points[i].y;

}

}

System.out.println(v);

}

}

}

全部评论
我第二题和你一样的做法,通过20%
1 回复 分享
发布于 03-21 21:30 四川
第三题按y坐标进行排序,y坐标有相同的直接输出-1,然后剩下进行二分求解
点赞 回复 分享
发布于 03-22 11:39 辽宁
我第三题和你的思路一样 按照高度从小到大排序,依次取,记录过去的时间,用例过了,自己加的用例也过了就是0%
点赞 回复 分享
发布于 03-22 07:31 江苏
第二题可能是相乘溢出了
点赞 回复 分享
发布于 03-22 00:24 广东
这是题目表述不清的锅。它应该想表达的意思是一秒走一步,一步步长范围为[0,v],其中v是整数。。
点赞 回复 分享
发布于 03-21 21:25 广东

相关推荐

评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务