奇安信8月25日笔试
第一题:输出较大面积
x是长,y是宽
例[4,1,2,7]代表4个点(0,4),(1,1),(2,2),(3,7) 点(0,4),(1,1)表示长方形:长(1-0),宽=min(4,1),面积=1*1=1
输入:[4,1,2,7]
输出:12
public class Main {
public static int getMaxAreas(int[] arr){
int res = -1;
for (int i = 0; i <arr.length ; i++) {
for (int j = 0; j <arr.length ; j++) {
if(i!=j){
// x是长
int x = j-i;
// y是宽
int y = Math.min(arr[i],arr[j]);
res = Math.max(res,Math.abs(x*y));
}
}
}
return res;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
s = s.replaceAll("\\[","");
s = s.replace("]","");
String[] split = s.split(",");
int length = split.length;
int[] arr = new int[split.length];
for (int i = 0; i <split.length ; i++) {
arr[i] = Integer.parseInt(split[i]);
}
System.out.println(getMaxAreas(arr));
}
} 第二题:判断城市0到城市4有多少路可以通 输入:[[1,2,3],[3],[3],[4],[]]
输出:3
package QiAnXin;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
/**
* 顶点0 到 1 2 3 [1,2,3]
* 节点1到3 [3]
* 节点2到3 [3]
* 节点3到4 [4]
* 节点4无 []
* 输入[[1,2,3],[3],[3],[4],[]]
* 输出 3
*/
//思路:深度优先搜索方式求出做有可能的路径,从0出发,栈记录路径上的点,每次遍历到点n-1,就将栈记录的路径加到答案中
// 本题为有向无环图,不会遍历到重复的点,无需遍历当前点是否遍历过
public class Main01 {
public int DagaPathNum(int[][] nodes){
// 存放二维节点
List<List<Integer>> ans = new ArrayList<List<Integer>>();
// 堆栈Deque
Deque<Integer> stack = new ArrayDeque<Integer>();
// 将指定的元素插入此双端队列的末尾
stack.offerLast(0);
dfs(nodes,0,nodes.length-1,ans,stack);
return ans.size();
}
// 深度优先搜索
public void dfs(int[][] graph,int x,int n,List<List<Integer>> ans,Deque<Integer> stack){
if(x==n){
ans.add(new ArrayList<Integer>(stack));
return;
}
for (int y:graph[x]) {
stack.offerLast(y);
dfs(graph,y,n,ans,stack);
stack.pollLast();
}
}
}
