饿了么笔试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);
}
}
}