首页 > zoom 笔试 2021/8/28
头像
keboom
发布于 2021-08-28 18:23
+ 关注

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

全部评论

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