美团-前端-笔试
感觉要G了,好难,选择题除了综测类感觉都考的很细,而且不是全部和前端相关的,和考研题目一样。个人记忆能力有限,尽量写一下相关的内容。算法也G了,第二题脑子出问题了,一个快速幂算法没写出来。之后等待下一次笔试,面试看情况吧,选择题做的还可以,万一过了呢!😂😂😂
算法部分:
第一题:输入一个字符串,每一次可以将一个字符改为大写或小写字母,最后要变为全大写、全小写、首字母大写三种情况之一,求最小变换次数。如AbC,输出1,可以变为ABC,或Abc。简单题,直接求大写字母个数就能求出解。
第二题:一个数组arr,每一次将其中除了第x个(从1开始)之外的其余元素乘以2,一共操作了q次,求最后操作完的元素和。
这个给个暴力解答案:
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner =new Scanner(System.in); int n= scanner.nextInt();// 数组的大小 int q= scanner.nextInt();// 操作次数 long[] arr = new long[n]; for(int i= 0;i <n; i++){ arr[i]= scanner.nextLong();// 输入数组元素 } Long mod = (long) 1000000007;// 10^9 + 7 int[] countNotDoubled = new int[n];// 记录每个元素未翻倍的次数 for(int i= 0;i< q; i++){ int xi = scanner.nextInt()- 1;// 读取操作的元素,索引调整为从0开始countNotDoubled[xi]++;//记录该元素未被翻倍的次数 countNotDoubled[xi]+=1; } long sum = 0; for(int i= 0;i< n; i++){ long doubleTimes =q- countNotDoubled[i];// 计算实际翻倍的次数 long addition =(arr[i]* powMod( 2,doubleTimes,mod))% mod;// 元素经过翻倍后的值 sum =(sum + addition)% mod;// 累加到总和中 } System.out.println(sum); } // 快速幂模算法,用于计算(base^exponent)% mod 的值1 usage public static long powMod(long base, long exponent, long mod) { long result = 1; base = base % mod; while(exponent>0){ if(exponent %2 == 1)result =(result * base)% mod;exponent = exponent >> 1; base =(base * base)% mod; } return result; } }
选择部分:
- 一个容量为m的循环队列,初始front和rear在同一位置,某一时刻队列长度计算方法
- 1型文法,2型文法,3型文法判断
- 操作系统使用抢占式优点调度算法,一共50个进程等待执行,高优先级事件片为200ms,低优先级为400ms,切换为10ms。若优先级队列中高优先级咱比为0.4.求系统开销占比率
- 已知一个文法求句柄,短语
- TPC三次握手,传说的ACK,seq之类
- DNS报文结构
- 依据类图看设计模式
- 责任链模式
- 16个页面,每个页面1K大小,传入64个物理磁盘,求地址位数
- 经典数字找规律题