奇安信 Java AC 2
难道有一次AC了,我也把我丑陋的代码,贴出来一下!!
第一题
public class Main {
// 键为pid value为其父类
static Map<String, String> map;
// 确认是不是目标值子类
public static boolean getMaster(String key, String val) {
String ss = map.get(key);
if (key.equals(val))
return true;
if (ss == null) {
return false;
}
if (ss.equals(val))
return true;
return getMaster(ss, val);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String firstStr = in.nextLine();
String secondStr = in.nextLine();
String arr[] = firstStr.split(" ");
String ppid[] = secondStr.split(" ");
int target = in.nextInt();
map = new HashMap();
for (int i = 0; i < arr.length; i++) {
map.put(arr[i], ppid[i]);
}
String val = new String().valueOf(target);
int res = 0;
for (int i = 0; i < arr.length; i++) {
if (getMaster(arr[i], val))
res++;
}
System.out.println(res);
}
} 第二题 import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main2 {
//寻找两个值不望同一个方向走的节点值
static int n;//树的节点个数
public static Integer findRes(Map map ,int key1,int key2,int index,int [] arr) {
if(index>n) return -1;
if(key1<arr[index]&&key2<arr[index]) {//往左
return findRes(map,key1,key2,index*2+1,arr);
}
if(key1>arr[index]&&key2>arr[index]) {
return findRes(map,key1,key2,index*2+2,arr);
}
return arr[index];
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int depth=in.nextInt();
n=(int) Math.pow(2, depth)-1;
int [] arr=new int[n];
Map<Integer,Integer> map=new HashMap();
//将数据存入map
//从根节点开始 比较 看这两个值是否往同一个方向走
//如果是继续往左或往右走(当前index*2+1 index*2+2)
//如果不是 记录 这个节点res 然后 如果这两个节点可以在查找到,返回res 如果不存在 返回-1
for(int i=0;i<n;i++) {
arr[i]=in.nextInt();
map.put(arr[i], i);
}
int key1=in.nextInt();
int key2=in.nextInt();
//找到根节点
int res=findRes(map,key1,key2,0,arr);
if(map.containsKey(key1)&&map.containsKey(key2)) {
System.out.println(res);
}else {
System.out.println(-1);
}
}
} 
查看6道真题和解析