奇安信 2021/08/07服务端开发工程师-Java笔试

40 分单选,20 分多选。计算机网络、操作系统、SQL相关的题目。
另外 40 分就是分别 20 分一道的编程题。编程题都是 LeetCode 那样的,已经给了程序框架,指定了返回值,不需要自己写输入输出。
总时长 2 个小时

编程题1

悉尼歌剧院准备举办一场舞蹈演出.
于是教练去挑选舞蹈演员
他让 n 名舞蹈演员站成一排。每个演员都有一个 独一无二 的身高.
每 3 个演员可以组成一个小组,分组规则如下:
从队伍中选出位置分别为的 j,k,l 的 3 名演员,他们的身高分别为分别为 height[j],  height[k],  height[l].
由于教练是个强迫症,所以舞蹈小队需要满足: height[j] < height[k] < height[l] 或者 height[j] > height[k] > height[l],
其中  0 <= j < k < l < n.
请你返回按上述条件可以组建的舞蹈小队。每个演员都可以是多个舞蹈小队的一部分。

输入

[1,5,3,2,4]

输出

3

说明

我们可以组建三个舞蹈小队  (1,3,4)、(1,2,4)、(5,3,2)

AC参考代码

public int TeamNums (int[] height) {
    int count = 0;
    for(int j = 0; j < height.length; j++){
        for(int k = j+1; k < height.length; k++){
            for(int l = k+1; l < height.length; l++){
                if(height[j]>height[k] && height[k]>height[l]) count++;
                if(height[j]<height[k] && height[k]<height[l]) count++;
            }
        }
    }
    return count;
}

编程题2

某某公司开发了一款生存类游戏,游戏地图大小用 m * n 的网格 grid 进行了标注。每一个地图单元格都有生存所需的资源;如果该单元格没有生存资源,那么就是 0,玩家每到地图一个单元可以获取对应位置的资源,用以生存储备。
  1. 为了使生存储备最大化,玩家需要按以下规则来收集资源:
  2. 每当玩家进入一个地图单元,就会收集该单元格中的所有资源。
  3. 玩家每次可以从当前位置向上下左右四个方向走。
  4. 每个单元格只能被收集(进入)一次。
  5. 不得收集(进入)资源数目为 0 的单元格。(没有收获还耗费体力)
  6. 玩家可以从地图中 任意一个 有资源的单元格出发或者是停止。

输入

[[0,6,0],[5,8,7],[0,9,0]]

输出

24

说明

收集路线为 7->8->9

输入

[[1,0,7],[2,0,6],[3,4,5],[0,3,0],[9,0,20]]

输出

28

说明

收集路线为 1->2->3->4->5->6->7

参考代码

public static int getMaximumResource (int[][] grid) {
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if(grid[i][j] != 0) backtrack(grid,i,j,0);
            }
        }
        return max;
    }
static int max = 0;
public void backtrack(int[][] grid,int i,int j,int sum){
    if(grid[i][j] == 0) return;
    sum += grid[i][j];
    int temp = grid[i][j];
    grid[i][j] = 0;
    max = Math.max(max,sum);
    if(i < grid.length-1) backtrack(grid,i+1,j,sum);
    if(i > 0) backtrack(grid,i-1,j,sum);
    if(j < grid[0].length-1)backtrack(grid,i,j+1,sum);
    if(j > 0) backtrack(grid,i,j-1,sum);
    grid[i][j] = temp;
}


#奇安信##笔经##Java##Java工程师#
全部评论
你第一题也可以参考下回溯,暴力三个for时间复杂度太高了
1 回复
分享
发布于 2021-08-07 17:45
找到校友了呀😁
点赞 回复
分享
发布于 2022-04-05 22:48
阅文集团
校招火热招聘中
官网直投

相关推荐

10 27 评论
分享
牛客网
牛客企业服务