554. 砖墙
/*
[[1,2,2,1], | 1, 3, 5 6
[3,1,2], | 3, 4, 6
[1,3,2], | 1 ,4 ,6
[2,4], | 2, 6
[3,1,2], | ,3 ,4,6
[1,3,1,1]] | 1,4 ,5,6
hm [1 ,2 3 4 5 | 6]
3 1 3 4 2 | 6
这题简直不要脸了
首先不是方形 rectangular 是矩形 。 硬是翻译成方形
*/
#define BUFSIZE 100000
int leastBricks(int** wall, int wallSize, int* wallColSize){
int hm[BUFSIZE] = {0};
int temp;
for (int i = 0; i < wallSize; i++) {
temp = 0;
for (int j = 0; j < wallColSize[i] - 1; j++) { // -1 是 不要把 右边界算进去
temp += wall[i][j];
printf("%d ", temp);
hm[temp]++;
}
printf("\n");
}
int max = 0;
for (int i = 1; i < BUFSIZE; i++) { // 从 1 开始 就把 左边界排除了
// printf("%d ", hm[i]);
max = (hm[i] > max) ? hm[i] : max;
}
// printf("\n");
return wallSize - max;
}
201. 数字范围按位与
/*
显然暴力肯定不行 8256 / 8266 个通过测试用例 醉了
0 1 2^0
2 3 2^1
4 7 2^2
8 15 2^3
16 31 2^4 ~ 2^5-1
int hm[32] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648};
看一下 m 和 N 是 2^?
*/
// int rangeBitwiseAnd(int m, int n){
// int res = 0xffffffff;
// for (int i = m ; i <= n; i++) {
// res &= i;
// }
// return res;
// }
#define BUFLEN 32 // 2147483647 == 2^32- 1
int rangeBitwiseAnd(int m, int n){
int res = 0xffffffff;
if (m == n) { // 自己 与 自己 还是自己
return m;
}
if ((int)log2(m) != (int)log2(n)) { // 不在一个区域内 直接是0
return 0;
} else { // 在一个区域内
for (long i = m; i <= n; i++) { // long 可能会超
res &= i;
}
return res;
}
}
网友评论