1.自动校对程序
import java.util.LinkedList;
import java.util.Scanner;
public class ByteDance1 {
public static String solve(String s) {
LinkedList<int[]> list = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
if (!list.isEmpty() && list.peekLast()[0] == s.charAt(i)-'a') { //当链表非空且当前元素与尾部元素相同时
if (list.peekLast()[1] == 2) //当链表尾部元素的频数等于2时,这时候不能再添加频数了
continue;
else {
//当链表尾部元素的频数等于1时,需要分类讨论,先将链表尾部元素弹出
int[] tmp = list.pollLast();
//当链表不为空且尾部频数等于2时表明出现两对相同元素的情况,所以
if (!list.isEmpty() && list.peekLast()[1] == 2)
list.add(new int[]{tmp[0],1});
else{
list.add(new int[]{tmp[0],tmp[1]+1});
}
}
} else
//链表为空或者链尾元素与当前元素不同,需要将当前元素加到尾部
list.add(new int[]{s.charAt(i)-'a',1});
}
StringBuilder sb = new StringBuilder();
while (!list.isEmpty()) {
int[] tmp = list.pollFirst();
for (int i = 0; i < tmp[1]; i++) {
sb.append((char)(tmp[0]+'a'));
}
}
return sb.toString();
}
public static void main(String[] args) {
/*
Scanner in=new Scanner(System.in);
int n=in.nextInt();
for(int i=0;i<n;i++){
System.out.println(solve(in.nextLine()));
}
*/
Scanner in=new Scanner(System.in);
int n=in.nextInt();
for(int i=0;i<n;i++){
System.out.println(solve(in.next()));
}
String s = "wooooooowwhellloo";
System.out.println(solve(s));
}
}
2.特工
import java.util.Scanner;
public class ByteDance4 {
public static int ret;
public static int[] record;
public static void recursive(int[] arr,int idx,int start,int D){
if(idx==3){
ret%=99997867;
ret++;
return;
}
//当数组剩余待选元素的数量小于record中未确定数字的槽位数量
if(arr.length-start<3-idx)
return;
for(int i=start;i<arr.length;i++)
{
if(idx==0)
{
record[idx]=arr[i];
recursive(arr,idx+1,i+1,D);
}
else if(arr[i]-record[0]>D)
break;
else
{
record[idx]=arr[i];
recursive(arr,idx+1,i+1,D);
}
}
}
public static void main(String[] args)
{
/*
Scanner in=new Scanner(System.in);
int N=in.nextInt();
int D=in.nextInt();
int[] arr=new int[N];
for(int i=0;i<N;i++)
arr[i]=in.nextInt();
ret=0;
record=new int[3];
recusive(arr,0,0,N,D);
System.out.println(ret);
*/
int N=5,D=19;
int[] arr={1,10,20,30,50};
ret=0;
record=new int[3];
recursive(arr,0,0,D);
System.out.println(ret);
}
}
3.特征提取
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
public class ByteDance3 {
static class feature {
int x;
int y;
public feature(int x, int y) {
this.x = x;
this.y = y;
}
public int hashCode() {
return x * 20000 + y;
}
public boolean equals(Object obj){
return this.hashCode()==obj.hashCode();
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt(); //测试样例数目
HashMap<feature, LinkedList<Integer>> map = new HashMap<>();
for (int i = 0; i < N; i++) {
int num = in.nextInt(); //帧数
for (int j = 0; j < num; j++) { //帧序数
int n_coords = in.nextInt();
for (int k = 0; k < n_coords; k++) {
int a = in.nextInt();
int b = in.nextInt();
feature f = new feature(a, b);
if (map.containsKey(f)) {
LinkedList<Integer> tmp = map.get(f);
if (tmp.peekLast() + 1 == j) {
tmp.pollLast();
tmp.add(j);
} else {
tmp.add(j);
tmp.add(j);
}
} else {
LinkedList<Integer> tmp = new LinkedList<>();
tmp.add(j);
tmp.add(j);
map.put(f, tmp);
}
}
}
int ans = 0;
for (feature f : map.keySet()) {
LinkedList<Integer> tmp = map.get(f);
while (!tmp.isEmpty()) {
int start = tmp.pollFirst();
int end = tmp.pollLast();
ans = Math.max(ans, end - start + 1);
}
}
System.out.println(ans);
}
}
}
4.找零钱
import java.util.Scanner;
public class ByteDance5 {
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int change=1024-in.nextInt();
int[] arr={64,16,4,1};
int res=0;
for(int i=0;i<4;i++)
{
res+=change/arr[i];
change%=arr[i];
}
System.out.println(res);
}
}