有赞笔试 2021/08/21

有赞笔试

单选题

已知IP地址130.63.160.2和子网掩码255.255.255.0,求子网号?

查询答案后子网号应该是160

某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台,当N的取值不超过()时系统不会发生死锁。答案是5

斐波那契递归实现的时间复杂度?2^n

多选题

忘了

编程题

第一题

给你一个字符串s,和一个匹配字符串p,求这两个字符串是否匹配?

.表示匹配任意字符

*表示零个或多个字符

例子:

"aa" "a" false

"ab" ".*" true

"aab" "c*a*b*" true

"misspis" "mis*pi" false

我的代码只通过了60%

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

    public boolean isMatch(String s, String p) {
        StringBuilder sb = new StringBuilder(s+"-");
        char[] pchars = p.toCharArray();
        for (int i = 0; i < pchars.length-1; i++) {
            if (pchars[i] == '.' && pchars[i + 1] == '*') {
                return true;
            } else if (pchars[i] == '.') {
                sb.deleteCharAt(0);
                continue;
            } else if (pchars[i + 1] != '*') {
                if (pchars[i] == sb.charAt(0)) {
                    sb.deleteCharAt(0);
                } else {
                    return false;
                }
            } else if (pchars[i + 1] == '*') {
                if (pchars[i] != sb.charAt(0)) {
                    continue;
                } else {
                    if (sb.charAt(1) != sb.charAt(0)) {
                        return false;
                    } else {
                        while (pchars[i] == sb.charAt(0)) {
                            sb.deleteCharAt(0);
                        }
                    }
                }
            } else if (pchars[i] == '*') {
                continue;
            }
            if (i == pchars.length - 2) {
                return sb.length() == 0;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("123");
        System.out.println(sb.charAt(0));
    }
}

第二题

给一个数组,判断它是否是严格升序或者降序

例子:

1 2 3 true

1 2 2 3 false

6 2 1 true

6 2 2 1 false

这个通过全部:

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

    public boolean isMonotonic (int[] nums) {
        if (nums.length == 1) {
            return true;
        }
        if (nums.length == 2) {
            return nums[0] != nums[1];
        }
        if (nums[0] == nums[1]) {
            return false;
        }
        // 单调递增则为1,递减则为-1
        int zj = nums[0] > nums[1] ? -1 : 1;
        for (int i = 0; i < nums.length - 1; i++) {
            if (zj == 1) {
                if (nums[i] >= nums[i + 1]) {
                    return false;
                }
            } else {
                if (nums[i] <= nums[i + 1]) {
                    return false;
                }
            }
        }
        return true;
    }
}
#有赞##笔经#
全部评论
第一题力扣第10题
1 回复 分享
发布于 2021-08-22 00:29
请问下是ACM模式还是核心代码模式
点赞 回复 分享
发布于 2021-09-04 15:40
啥卷子
点赞 回复 分享
发布于 2021-08-21 14:27

相关推荐

不愿透露姓名的神秘牛友
07-09 12:02
ssob上原来真有BOSS啊
硫蛋蛋:这种也是打工的,只不是是给写字楼房东打工
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务