有赞笔试 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
啥卷子
点赞
送花
回复
分享
发布于 2021-08-21 14:27
秋招专场
校招火热招聘中
官网直投
请问下是ACM模式还是核心代码模式
点赞
送花
回复
分享
发布于 2021-09-04 15:40

相关推荐

点赞 5 评论
分享
牛客网
牛客企业服务