餓了么筆試20250321
一、送分
二、給一個小寫字母的字符串,如果兩個不同位置的字符同時滿足:位置的奇偶性相同,字典差距不超過g ('a' 'c' 差距2),則是xx對,求共有多少對這樣的數(shù)。(通過90%)
用兩個長26的數(shù)組分別記錄奇數(shù)時和偶數(shù)時各個字母有多少個。
然后分別雙指針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后位置變?yōu)?x,y-1),
(k,0)處有一個傳送器,能隨時傳回去同時把收集好的雨水倒入該處。
求小笨能接住所有雨水的最小速度v,
如果不能接住所有雨水,返回-1.一個雨滴在(x,0)處時只要小笨也在x位置則也能接住
//自測對的,但是提交0%,有疑問,速度不應(yīng)該是浮點數(shù)嗎
//思路大概是先按時間排序,遍歷水滴,
//因為每次接完都要回(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++){
//當(dāng)前時間,如果當(dāng)前時間等于下一個雨滴的時間,且下一個水滴橫坐標(biāo)位置不在k處,則接不到
if(nowTime==points[i].y){
if(k!=points[i].x){
v=-1;
break;
}
}
else{
//當(dāng)前速度如果接不到,提升速度
if((points[i].y-nowTime)*v<Math.abs(points[i].x-k))
{
v=Math.abs(points[i].x-k)/(points[i].y-nowTime);
//v不應(yīng)該是是浮點數(shù)嗎(x,y) 假設(shè)只有一個點(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);
}
}
}