一共两道算法,第一题通过80%案例,另一道没做。
第一题:
感觉不难,直接暴力,但是只通过80%,应该是时间复杂度问题。
给定一个数组,每个数不是0就是1。你会从其中拿走一张牌,求剩下的牌中连续为1的最大值。
案例:输入【1,1,0,1,0,1】输出 3 解释:拿走第一个0,则最大为三个1。
附代码:(注:代码只通过80%)
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
int[] resArr = new int[t];
for (int i = 0; i < t; i++) {
int n = scanner.nextInt();
int[] arr = new int[n];
boolean one = false;
boolean zero = false;
for (int j = 0; j < n; j++) {
arr[j] = scanner.nextInt();
if (arr[j] == 1)
one = true;
if (arr[j] == 0)
zero = true;
}
if (zero == false) {
resArr[i] = 2;
continue;
}
if (one == false) {
resArr[i] = n;
continue;
}
if (n == 1) {
resArr[i] = 1;
continue;
}
int res = 1;
boolean flag = false;
for (int k = 0; k < n; k++) {
if (arr[k] == 1)
continue;
flag = true;
int left = k - 1;
int right = k + 1;
int sum = 0;
while (left >= 0) {
if (arr[left] == 1) {
sum++;
left--;
} else
break;
}
while (right < n) {
if (arr[right] == 1) {
sum++;
right++;
} else
break;
}
res = Math.max(res, sum);
resArr[i] = res;
}
if (flag == false)
resArr[i] = 2;
}
for (int i = 0; i < t; i++) {
System.out.println(resArr[i]);
}
}
}
笔试题二。
太多内容没记住,时间不够。
酒店问题,图,求路径最小