继续继续~
250
遍历每一天,最后再完成剩下的,明白了一个最简单的向上取整方法,就是在原来的数基础上加上n-1
public class WidgetRepairs {
public int days(int[] arrivals, int numPerDay) {
int ans = 0;
int sum = 0;
for (int arrival : arrivals) {
sum += arrival;
if (sum > 0) {
ans++;
sum -= Math.min(numPerDay, sum);
}
}
if (sum > 0) {
ans += (sum + numPerDay - 1) / numPerDay;
}
return ans;
}
}
500
关于进制的一道数学题,首先这个数肯定小于base(进制),大于进制的就能缩小,也就不能被自己整除。
判断是否符合的条件,就是取mod之后是否为1。数学证明很简单。翻译成自然逻辑就是:每次加上一个base数都会进一位这样数字的和会大1,所以加上一个base-1的数,数字的和就不变咯~
public class InterestingDigits {
public int[] digits(int base) {
int k = 0;
for (int i = 2; i < base; i++) {
if (base % i == 1) {
k++;
}
}
int[] ans = new int[k];
k = 0;
for (int i = 2; i < base; i++) {
if (base % i == 1) {
ans[k] = i;
k++;
}
}
return ans;
}
}
1100
模拟小球在空间撞来撞去,下面算法比较好的几点,矩阵代表着坐标,一个砖块是2*2的坐标,只有中心点有状态。小球的碰撞判定也是按照中心点状态来算的。其次就是无解的判断。这个for循环蛮好的。
for (int seconds = 0, lastBreak = 0; seconds < lastBreak + 4 * height * width; seconds++)
就是如果小球用所有角度撞了所有位置,也没有新的破碎,那么就是无解了。传说中的鸽笼原理。
public class BrickByBrick {
public int timeToClear(String[] map) {
int height = 2 * map.length + 3, width = 2 * map[0].length() + 3;
char[][] state = new char[2 * height + 3][2 * width + 3];
for (int y = 0; y < height; y += 2) {
for (int x = 0; x < width; x += 2) {
state[y][x] = '#';
}
}
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length(); j++) {
state[2 * i + 2][2 * j + 2] = map[i].charAt(j);
}
}
int bricks = 0;
for (int y = 0; y < height; y+=2) {
for (int x = 0; x < width; x+=2) {
if (state[y][x] == 'B') {
bricks++;
}
}
}
int y = 1, x = 2, dx = 1, dy = 1;
for (int seconds = 0, lastBreak = 0; seconds < lastBreak + 4 * height * width; seconds++) {
if (y % 2 == 1) {
if (state[y + dy][x] == 'B') {
state[y + dy][x] = '.';
dy *= -1;
bricks--;
lastBreak = seconds;
if (bricks == 0) {
return seconds;
}
} else if (state[y + dy][x] == '#') {
dy *= -1;
}
} else {
if (state[y][x + dx] == 'B') {
state[y][x + dx] = '.';
dx *= -1;
bricks--;
lastBreak = seconds;
if (bricks == 0) {
return seconds;
}
} else if (state[y][x + dx] == '#') {
dx *= -1;
}
}
y += dy;
x += dx;
}
return -1;
}
}