- 1 比特与 2 比特字符
int n = bits.length;
int i = 0; 因为,如果最后一个字符必须是一个一比特字符,那么,一定可以跳到最会一个位置。也就是n-1这个位置。所以不能遍历到这个位置
while(i < n - 1) {如果最后一个位置,不是单独的一位,那么一定是会跳到n这个位置的
i += bits[i] + 1;不管是11还是10都是以1为开头的两位,跳两步与跳一步的情况
}
714. 买卖股票的最佳时机含手续费
b[0] = -prices[0];
for(int i = 1; i < n; i++) {
b[i] = Math.max(b[i - 1], s[i - 1] - prices[i]);持有
s[i] = Math.max(s[i - 1], b[i - 1] + prices[i] - fee);未持有
}
713. 乘积小于 K 的子数组
while(r < nums.length) {
sum = nums[r];
while(sum >= k) {**//attention因为可能了一个不得了的数字**
sum /= nums[l];
l++;
}
ans += r - l + 1;
r++;
}
697. 数组的度
Map<Integer, int[]> map = new HashMap<>();
map.put(nums[i], new int[]{次数, 起始位置, 终止位置});
if(numMax < cur[0]) {找到出现次数最多的元素
numMax = cur[0];
lenMin = cur[2] - cur[1] + 1;
}else if(numMax == cur[0])可以等于,但不能小于
{
if(lenMin > (cur[2] - cur[1] + 1)) {更新最小值,因为起始值舍了0所以判断一下
lenMin = cur[2] - cur[1] + 1;
}
}
695. 岛屿的最大面积
public int dfs(int[][] grid, int i, int j) {
if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0) {越界了或者遇到水,直接返回0
return 0;
}
grid[i][j] = 0;//防止反复横跳;也不需要恢复,因为一块遍历过,就不需要再遍历了。都说了是一块;
int count = 1;
count += dfs(grid, i - 1, j);
count += dfs(grid, i + 1, j);
count += dfs(grid, i, j - 1);
count += dfs(grid, i, j + 1);
//grid[i][j] = 1;attention错误
return count;
}
661. 图片平滑器
for(int i = 0; i < r; i++) {
for(int j = 0; j < c; j++) {
int num = 0, sum = 0;开始求这个位置
for(int x = i - 1; x <= i + 1; x++) {(i - 1, j - 1)-(i + 1, j + 1)
for(int y = j - 1; y <= j + 1; y++) {
if( x >= 0 && y >= 0 && x < r && y < c) {
num++;
sum += img[x][y];
}
}
}
ans[i][j] = sum / num;
}
}