有赞笔试 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;
}
} #有赞##笔经#