2021秋招笔试编程题记录(待更新)
因为有些公司的笔试题是保密的,所以下面不会给出题目具体来源。
1.String A 和 String B代表两行输入记录,'#'代表后退键,若A和B代表的字符串一致返回相同字符串,不一致返回两个字符串。
From:某运营商子公司
public class Solution {
public String[] StrCmp(String A,String B) {
String[] res = new String[2];
StringBuilder sb = new StringBuilder(Math.max(A.length(), B.length()));
for(int i=0;i<A.length();i++)
if(A.charAt(i)!='#')
sb.append(A.substring(i,i+1));
else if(sb.length()!=0)
sb.deleteCharAt(sb.length()-1);
res[0] = sb.toString();
sb.replace(0, sb.capacity(), "");
for(int i=0;i<B.length();i++)
if(B.charAt(i)!='#')
sb.append(B.substring(i,i+1));
else if(sb.length()!=0)
sb.deleteCharAt(sb.length()-1);
res[1] = sb.toString().equals(res[0])?" ":sb.toString();
return res;
}
public static void main(String[] args) {
Solution sn = new Solution();
String A="#A33##ppll#ed",B="#R##Appd34###le";
String[] res = sn.StrCmp(A, B);
System.out.println(res[0]);
if(!res[1].equals(" "))
System.out.println(res[1]);
}
}
2.T输入测试样例次数;N、M分别输入屏幕键盘纵横比;输入键盘布局;输入要打印的字符串;输出光标移动次数+确认次数。
说明:光标开始位于左上角,每找到一个字符要确认一次,录入的键盘除了_外其他字符不会重复。
例如:
1
3 3
__A
MR_
DC_
ACM
输出结果:10
From:某国行子公司
public class Solution {
//因为nextInt输入会遗留换行符所以要额外读取\n
public static void main(String[] args) {
//Solution sn = new Solution();
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
int t=sc.nextInt(),n,m;sc.nextLine();
while(t-- != 0) {
n=sc.nextInt();m=sc.nextInt();sc.nextLine();
Map<Character,Integer> mp = new HashMap<>();
int[][] pos = new int[m*n][2];
int p=0; //数组下标
for(int i=0;i<n;i++) {
String tmp = sc.nextLine();
for(int j=0;j<m;j++) {
char c=tmp.charAt(j);
if(c != '_') {
pos[p][0]=i;pos[p][1]=j;
mp.put(c, p++);
}
}
}
String str = sc.nextLine();
int a=0,b=0,step=0;
for(int i=0;i<str.length();i++) {
p = mp.get(str.charAt(i));
int dist = Math.abs(pos[p][0]-a)+Math.abs(pos[p][1]-b);
a=pos[p][0];b=pos[p][1];
step += dist;
}
System.out.println(step+str.length());
}
}
}
3.模拟LRU页面置换算法,输入页面队列的size和页面读入次数;依次输入页面的编号;输出缺页次数。
例如:
4 9
1 2 2 5 9 1 3 2 5
7
相似题:模拟FIFO页面置换算法
From:某国行子公司
public class Solution {
//remove和poll的区别,尽可能不用add
@SuppressWarnings("resource")
public static void main(String[] args) {
//Solution sn = new Solution();
Scanner sc = new Scanner(System.in);
int size=sc.nextInt(),n=sc.nextInt(),absent=0;sc.nextLine();
int[] pid = new int[n];
for(int i=0;i<n;i++)
pid[i] = sc.nextInt();
Queue<Integer> page = new LinkedList<>();
for(int i:pid) {
if(page.contains(i)) {
page.remove(i);
page.offer(i);
continue;
}
if(page.size() != size)
page.offer(i);
else {
page.poll();
page.offer(i);
}
absent++;
}
System.out.println(absent);
}
}