首页 > 2021/08/07 - 奇安信下午三点笔试

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;
    }
}




全部评论

(1) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐