DP EASY 21.11.11
LCS01.下载插件
列出几项找规律
class Solution {
public int leastMinutes(int n) {
if (n == 1){
return 1;
}
int p = 1, i = 2;
while (true){
p = p * 2;
if (n > p / 2 && n <= p){
break;
}
i++;
}
return i;
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:35.2 MB, 在所有 Java 提交中击败了51.37%的用户
面试题08.01.三步问题
1个台阶,1,sum=1;
2个台阶,1+1,2,sum=2;
3个台阶,1+1+1,2+1,1+2,3,sum=4;
n>3个台阶,等于n-3个台阶的走法+n-2个台阶的走法+n-1个台阶的走法。
注意:1000000007≈10^9; 而2^32 > 8^10 ≈ 10^9
In fact, 2^32 = 4,294,967,296, 2^31
=2,147,483,648>2*10^9
因此三个数不模相加,可能会溢出。因此需要模两次,分开模。
class Solution {
public int waysToStep(int n) {
int MOD = 1000000007;
if (n == 1){
return 1;
}
if (n == 2){
return 2;
}
if (n == 3){
return 4;
}
int a = 1, b = 2, c = 4, temp = 0;
for (int i = 4; i <= n; i++){
temp = ((a + b) % MOD + c) % MOD;
a = b;
b = c;
c = temp;
}
return c;
}
}
面试题05.03.翻转数位
当再次遇到零时,计算两个零之间1的个数,从新算起,同时记录最大值。
54 | 1 | 1 | 0 | 1 | 1 | 0 |
---|---|---|---|---|---|---|
max | 5 | 4 | 3 | 3 | 2 | 1 |
temp | 2 | 1 | 0 | 2 | 1 | 0 |
class Solution {
public int reverseBits(int num) {
int n = 0, cur = 0, max = 0;
for (int i = 1; i <= 32; i++){
if ((num & 1) == 1){
n++;
cur++;
}else {
n = cur + 1;
cur = 0;
}
max = Math.max(max, n);
num = num >> 1;
}
return max;
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:34.9 MB, 在所有 Java 提交中击败了95.25%的用户