zoom 笔试 2021/8/28

zoom笔试

第一部分

单选:

  • 给出ip和掩码,计算网络号
  • 排序算法,各种的复杂度,稳定性,二分法比较次数
  • Java代码判断执行结果
  • 图的基础知识
  • a = 2 | 24 ,这个原来是或运算啊,我当时没看出来,梦错答案了啊!!

第二部分

多选:

  • 排序问题
  • 数据库引擎,日志。有道题问执行了delete后,执行下列那个语句磁盘不会删除
  • 其他的忘了,有挺多不确定的

第三部分

第一题:

找132模式的匹配,有一个数组,找出遵循以下规则的个数,有下标索引i,j,k满足条件:

i < j < k 并且 nums[i] < nums[k] < nums[j]

例子:

[-1,3,2,0]

3

解释:满足条件的有[-1, 3, 2] [-1,3,0] [-1,2,0]

直接暴力了,我是想不到啥好的方法。。

/**
 * @author keboom
 * @date 2021/8/28
 */
public class Solution1 {

    public int find132Pattern (int[] nums) {
        int len = nums.length;
        int count = 0;
        // 第一个数
        for (int i = 0; i < len-2; i++) {
            // 第二个数
            for (int j = i+1; j < len-1; j++) {
                // 第三个数
                for (int k = j+1; k < len; k++) {
                    if (nums[i] < nums[k] && nums[k] < nums[j]) {
                        count++;
                    }
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] nums = {-1, 3, 2, 0};
        int res = new Solution1().find132Pattern(nums);
        System.out.println(res);
    }
}

第二题:

给你个数组,滑动窗口大小,滑动窗口步长。求每个窗口中最大值

例子:

[1,3,-1,-3,5,3,6,7],3,2

[3, 5, 6 ,7]

解释:[1,3-1] 中最大值3,[-1,-3,5] 中最大值5,[5,3,6] 中最大值6,[6,7] 中最大值7

由于他给的例子中数组长度都是偶数,所以我的返回结果中数组长度有问题,没有考虑数组长度为奇数的情况,最后也没来的及改,早知道前面加快点速度了。。。只过了40%,剩下的应该都是数组长度为奇数的情况了。

import java.util.Arrays;

/**
 * @author keboom
 * @date 2021/8/28
 */
public class Solution2 {

    public int[] slideWindow(int[] nums, int windowSize, int step) {
        int left = 0;
        int right = windowSize-1;
        int resLen = 0;
        // 如果是偶数
        if (nums.length % 2 == 0) {
            resLen = nums.length / step;
        } else { // 如果是奇数
            resLen = (nums.length+1)/step;
        }
        int[] res = new int[nums.length / step];
        int resIndex = 0;
        while (left < nums.length) {
            findMax(nums, left, right,res,resIndex);
            left += step;
            right += step;
            resIndex++;
        }
        return res;
    }

    private void findMax(int[] nums, int left, int right, int[] res, int resIndex) {
        int max = Integer.MIN_VALUE;
        for (int i = left; i <= right; i++) {
            if (i == nums.length) {
                break;
            }
            max = Math.max(max, nums[i]);
        }
        res[resIndex] = max;
    }


    //[1,3,-1,-3,5,3,6,7],3,2
    //[1,3,-1,-3,5,3,6,7],3,1
    public static void main(String[] args) {
        int[] nums = {1,3,-1,-3,5,3,6,7};
        int[] res = new Solution2().slideWindow(nums, 3, 2);
        System.out.println(Arrays.toString(res));
    }
}
#zoom校招##笔经##ZOOM#
全部评论
直接用一个集合来保存就不用考虑这个问题了把,但我只过60%,不知道问题在哪
1 回复 分享
发布于 2021-08-28 18:25
投的什么岗位呀
1 回复 分享
发布于 2021-09-10 09:07
老哥,出结果了吗?😂
1 回复 分享
发布于 2021-09-13 07:56
第二题之前做过step=1的,最优时间复杂度应该是用双端队列的,我就再双端队列上死做死做都是60%,交卷之后突然意识到,**,既然第一题暴力能过,为啥第二题我不暴力呢,这波是思维被限制了啊🤣
点赞 回复 分享
发布于 2021-08-28 18:26
第二题单调栈写完只过了20,裂开。。
点赞 回复 分享
发布于 2021-08-28 18:38
第一题真的的是暴力解也太***了吧,我以前做过判断存在不存在的,想在上面改进,结果浪费了好多时间,我是***
点赞 回复 分享
发布于 2021-08-28 19:07
第二题优先队列过了40,难受,时间有点短
点赞 回复 分享
发布于 2021-08-28 21:24
老哥出结果了吗
点赞 回复 分享
发布于 2021-09-08 16:29
时长多久呀?
点赞 回复 分享
发布于 2021-09-14 15:25
第一题应该可以用dp
点赞 回复 分享
发布于 2022-08-09 07:49
兄弟笔试有操作系统的题吗
点赞 回复 分享
发布于 2022-10-18 12:25 安徽

相关推荐

11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
评论
10
124
分享
牛客网
牛客企业服务