美团笔试题 java各位佬们帮我分析一下前三题

前三题通过率只有30、40、16我不理解,各位大佬们给我分析一下代码

1、第一行输入一个正整数n,代表菜品总数。

第二行输入n个正整数a_i,代表每道菜的价格。

第三行输入两个正整数x和y,x代表满减的价格,y代表红包的价格。

保证所有a_i的和大于x+y,保证会用到满减

Scanner in = new Scanner(System.in);

int n = in.nextInt();

int sum=0;

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

sum+=in.nextInt();

}

int x=in.nextInt();

int y=in.nextInt();

if (sum >x+y) {

System.out.println(sum-x-y);;

}else {

System.out.println(sum-y);

}

第一题为啥通过率只有30%

2、小美定义以下三种单词是合法的:

1. 所有字母都是小写。例如:good

2. 所有字母都是大写。例如:APP

3. 第一个字母大写,后面所有字母都是小写。例如:Alice

40%

现在小美拿到了一个单词,她每次操作可以修改任意一个字符的大小写。小美想知道最少操作几次可以使得单词变成合法的?

Scanner in = new Scanner(System.in);

String s = in.nextLine();

int count=0;

boolean first=true;

int fbig=0,fmall=0,big=0,small=0;

for (char c:s.toCharArray()) {

if (first&&Character.isUpperCase(c)) {

fbig=1;

first=false; //第一个字母是大写

}else if (first&&Character.isLowerCase(c)) {

fmall=1;

first=false; //第一个字母是小写

}

if (!first&&Character.isUpperCase(c)) {

big++;

} else if (!first&&Character.isLowerCase(c)) {

small++;

}

}

if (fbig == 1) {

//全大写 或者第一个大写后面小写 再或者全变小写

int all_big=small;

int fb_as=big;

int all_small=1+big;

System.out.println(Math.min(all_big,fb_as));

}else {

int all_big=1+small;

int fb_as=1+big;

int all_small=big;

System.out.println(Math.min(all_big,all_small));

}

为啥通过率只有40%,各位佬帮看看,感觉都考虑到了阿

3、 第一行输入两个正整数n,q,代表数组的大小和操作次数。

第二行输入n个正整数a_i,代表数组的元素。

第三行输入一个正整数q,代表操作的次数。

接下来的q行,每行输入一个正整数x_i,代表第i次操作未被翻倍的元素。

输出

Scanner in = new Scanner(System.in);

int n = in.nextInt();

int q = in.nextInt();

float[] nums = new float[n];

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

nums[i] = in.nextInt();

}

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

int x = in.nextInt();

for (int j = 0; j < nums.length; j++) {

if (j + 1 != x) {

nums[j] = nums[j] * 2;

}

}

}

float sum = 0;

for (float x : nums) {

sum += x;

}

System.out.println((int)(sum %(Math.pow(10,9)+7)));

}

第三题通过率16%我不理解 是我太菜了吗?各位佬们帮我分析分析是哪里出问题了

#美团笔试##悬赏#
全部评论
第三题要用快速幂,因为正常幂取模肯定超时
2 回复
分享
发布于 03-16 21:10 上海
第一题支付不能为负数
1 回复
分享
发布于 03-16 21:07 北京
联易融
校招火热招聘中
官网直投
第二题的话其实不用这么复杂,统计一下大写字母和小写字母的个数,判断一下哪个小,保存下来;另外一个特殊情况就是当首字母为大写时,如果大写字母个数-1的个数小于小写字母个数的话,就保存这个大写字母-1值;结果就在两个值中选最小的。第三题我始终都是0%
1 回复
分享
发布于 03-16 21:13 福建
太菜了 还得练
1 回复
分享
发布于 03-16 21:15 黑龙江
第一道没用long,用long就过了,第二道感觉你的思路不太好读,第三个直接对10e+7取模会爆掉的,而且结果不能用整数类型了,应该用字符串吧,然后前面不断取模剪枝
1 回复
分享
发布于 03-16 21:15 陕西
第一个题是因为sum要用long,而且sum只用大于x即可
点赞 回复
分享
发布于 03-16 21:08 福建
第一题要用long,数据超了
点赞 回复
分享
发布于 03-16 21:08 天津
第二题别想太复杂,直接三次操作,全转为大写,全转为小写,转为首字母大写其他小写,取个最小值就ok
点赞 回复
分享
发布于 03-16 21:10 河南
第三题暴力会超时,n的范围是2*10^5
点赞 回复
分享
发布于 03-16 21:11 河南
第三题到底啥情况我也是16.6😂😂
点赞 回复
分享
发布于 03-16 21:12 黑龙江
第三题我以为是原数组中等于x的那个值时,不用翻倍
点赞 回复
分享
发布于 03-16 21:17 福建
以后做笔试,能用long就用,别用int
点赞 回复
分享
发布于 03-16 21:30 重庆

相关推荐

4 3 评论
分享
牛客网
牛客企业服务