2021/08/07 - 奇安信下午三点笔试
# 单项选择(20*2分)
会一大半,一小半不会,问题有数据库、操作系统(epoll、select、poll、页面置换算法)这些都不咋会、linux指令有点不会(top指令),java基础(见下面)、网络(tcp、ARP什么的)等等
## 有个类似这个的题,我只能想起来一部分了,还有没有大佬能想起来告诉我一下
public class Main {
private static int var = 100;
public static void main(String[] args) {
Main main = new Main();
main.var++;
Main.var++;
System.out.println(Main.var);
}
} # 多项选择(10*2分)
好多不会的,有点懵
# 编程题(20*2分),均为核心代码模式,均100%
## 第一题
一个存储不重复元素的数组height,数组长度为n,找到下标0<i<j<l<n,使得height[i] < height[j] < height[l]或height[i] > height[j] > height[l]。
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param height int整型一维数组 舞蹈员身高的一维数组
* @return int整型
*/
private Stack<Integer> stack;
int res;
public int TeamNums (int[] height) {
// write code here
res = 0;
stack = new Stack<>();
for (int i = 0; i < height.length; i++) {
stack.push(height[i]);
countNums(height, i + 1);
stack.pop();
}
for (int i = 0; i < height.length; i++) {
stack.push(height[i]);
countNumsDown(height, i + 1);
stack.pop();
}
return res;
}
private void countNumsDown(int[] height, int index) {
if (stack.size() == 3 && ++res >= 0) return;
if (index == height.length) return;
for (int i = index; i < height.length; i++) {
if (height[i] < stack.peek()) {
stack.push(height[i]);
countNumsDown(height, i + 1);
stack.pop();
}
}
}
private void countNums(int[] height, int index) {
if (stack.size() == 3 && ++res >= 0) return;
if (index == height.length) return;
for (int i = index; i < height.length; i++) {
if (height[i] > stack.peek()) {
stack.push(height[i]);
countNums(height, i + 1);
stack.pop();
}
}
}
} ## 第二题 给一个mxn的矩阵,对其收集资源,输出最多能够收集到的资源
收集方式:
1. 可以从任意位置开始收集
2. 资源为0则不能收集
3. 每次收集完资源后可以继续向上/下/左/右继续收集
4. 每个资源最多只能收集一次
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型二维数组 为n*m 的二维数组
* @return int整型
*/
int[][] visited;
int res;
int finalRes;
public int getMaximumResource (int[][] grid) {
int m = grid.length;
int n = grid[0].length;
visited = new int[m][n];
res = 0;
finalRes = Integer.MIN_VALUE;
// write code here
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] != 0) findResource(grid, i, j);
}
}
return finalRes;
}
private void findResource(int[][] grid, int x, int y) {
if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || grid[x][y] == 0 || visited[x][y] == 1) return;
visited[x][y] = 1;
res += grid[x][y];
finalRes = Math.max(res, finalRes);
findResource(grid, x + 1, y);
findResource(grid, x - 1, y);
findResource(grid, x, y + 1);
findResource(grid, x, y - 1);
res -= grid[x][y];
visited[x][y] = 0;
}
} 
腾讯成长空间 5958人发布