牛客网——美团2024届秋招笔试第三场编程真题
- 😍😍😍 相知
- 🙌🙌🙌 相识
- 😢😢😢 开始刷题
- 1. 平均数为k的最长连续子数组
- 2. 小球投盒
- 3. 小红结账
- 4. 小美的游戏
- 5. 小美种果树
- 6. 小美的数组重排
- 7. 判断ip地址是否合法
😍😍😍 相知
刷题不要一上来就直接干,先看题,明白题说的什么意思,然后想一下用什么现成的算法和数据结构可以快速解决,如果还是无从下手,建议先去看视频,不要直接翻评论或官方代码实现,看完视频,自己在idea中模拟敲几遍代码,如果跑通了,先别急着上leetcode黏贴,而是再回顾一下要点,然后确定自己完全懂了后,在leetcode中手敲,注意是手敲下来!!! 目前我就是采用的这种方法,虽然慢,但是可以维持一周忘不掉它,如果要想长期不忘,只能隔段时间就review一下了,就算是大牛,知道方法,长时间不碰,也不可能保证一次到位把代码敲完一遍过!!!
🙌🙌🙌 相识
本阶段我们要一起学习的是美团2024届秋招笔试第三场编程真题!!!
😢😢😢 开始刷题
1. 平均数为k的最长连续子数组
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int k = sc.nextInt();int ans = -1;long pre = 0, cur=0;Map<Long, Integer> map = new HashMap<>();map.put(0L, 0);for (int i = 1; i <= n; i++) {cur = pre + sc.nextInt() - k;if (map.containsKey(cur)) ans = Math.max(ans, i - map.get(cur));else map.put(cur, i);pre = cur;}System.out.println(ans);}
}
2. 小球投盒
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int a = in.nextInt();int b = in.nextInt();HashSet<Integer> hashset = new HashSet<>();for(int i = 1;i<=a;i++){hashset.add(i);}for(int i = 0;i < b;i++){int left = in.nextInt();int right = in.nextInt();if(left == 1){if(hashset.contains(right)){hashset.remove(right);}if(hashset.size()==0){System.out.print(i+1);return;}}else{if(!hashset.contains(right)){System.out.print(i+1);return;}hashset = new HashSet<>();hashset.add(right);}}System.out.print(-1);}
}
3. 小红结账
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n = in.nextInt();int m = in.nextInt();ArrayList<Long> arraylist = new ArrayList<>();for(int i = 0;i<m;i++){arraylist.add(0l);}for(int i = 0;i<n;i++){//每张账单int people = in.nextInt();int money = in.nextInt();long fenmony = (long)Math.ceil(money*1.0/(people));for(int j = 0;j<people-1;j++){int who = in.nextInt();arraylist.set(who-1,fenmony+(long)arraylist.get(who-1));}}for(int i = 0;i<arraylist.size();i++){System.out.print(arraylist.get(i));if(i!=arraylist.size()-1) System.out.print(" ");}}
}
4. 小美的游戏
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { long mod = 1000000007; Scanner in = new Scanner(System.in); int len = in.nextInt(); int max_op = in.nextInt(); long res = 0L; long sum = 0L; long[] a = new long[len]; for(int i=0;i<len;i++){ a[i] = in.nextInt(); } Arrays.sort(a); int idx = len-1; for(int j=1;j<=max_op;j++){ if(a.length>=2){ long mul = (a[idx] * a[idx-1])%mod; a[idx-1] = mul; a[idx] = 1; idx = idx - 1; }else{ res = Math.max(res, a[0]); break; } } for(int j=0;j<len;j++){ sum = sum + a[j]; } res = Math.max(res,sum%mod); System.out.print(res); } }
5. 小美种果树
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int x = in.nextInt();int y = in.nextInt();int z = in.nextInt();int index = 0;//模拟???while(true){index++;z -=x;z -=y; if(z<=0)break;index++;z -=x;if(z<=0)break;index++;z -=x;if(z<=0)break;}System.out.print(index);}
}
6. 小美的数组重排
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int q = in.nextInt();for (int i = 0; i < q; i++) {int n = in.nextInt();int m = in.nextInt();int [] a = new int[n];for (int j = 0; j < n; j++) {a[j] = in.nextInt();}int [] b = new int[n];for (int j = 0; j < n; j++) {b[j] = in.nextInt();}Arrays.sort(a);Arrays.sort(b);int[] reversedArray = new int[n];for (int j = 0; j < n; j++) {reversedArray[j] = b[n - 1 - j];}boolean flag = false;for(int j = 0;j<n;j++){if(a[j]+reversedArray[j]<1||a[j]+reversedArray[j]>m){System.out.println("No");//if(i!=n-1)System.out.println();flag = true;break;}}if(!flag){System.out.println("Yes");//if(i!=n-1)System.out.println();}}}
}
7. 判断ip地址是否合法
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String addStr = scanner.nextLine();//非空if (addStr.equals("") || addStr == null) {System.out.println("invalid");return;}char c1 = addStr.charAt(0);char c2 = addStr.charAt(addStr.length() - 1);//4.IP地址不能以点号开始或结束,例如.192.168.0.1和192.168.0.1.是非法的。String s1 = Character.toString(c1);String s2 = Character.toString(c2);String[] strings = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };int temp = 0;for (String string : strings) {if (string.equals(s1)) {temp++;}if (string.equals(s2)) {temp++;}}if (temp != 2) {System.out.println("invalid");return;}//1.IP地址由四个数字组成,用点号分隔。String[] split = addStr.split("\\.");if (split.length != 4) {System.out.println("invalid");return;}//3.数字之间没有多余的前导零,例如01是非法的。for (String s : split) {if (s.length() == 2 && Character.toString(s.charAt(0)).equals("0")) {System.out.println("invalid");return;}}for (int i = 0; i < split.length; i++) {//2.每个数字的取值范围是0到255。try {if (Integer.parseInt(split[i]) > 255) {System.out.println("invalid");return;}} catch (NumberFormatException e) {System.out.println("invalid");return;}}int address1 = Integer.parseInt(split[0]);int address2 = Integer.parseInt(split[1]);int address3 = Integer.parseInt(split[2]);int address4 = Integer.parseInt(split[3]);if (address1 < 126 && address1 > 0 || address1 == 126 && address2 == 0 &&address3 == 0 && address4 == 0) {System.out.println("A_address");} else if (address1 >= 128 && address1 <= 191) {System.out.println("B_address");} else if (address1 >= 192 && address1 <= 223) {System.out.println("C_address");} else {System.out.println("other");}}
}