mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
Update 0044.开发商购买土地.md
This commit is contained in:
@ -388,3 +388,85 @@ if __name__ == "__main__":
|
|||||||
main()
|
main()
|
||||||
|
|
||||||
```
|
```
|
||||||
|
### C
|
||||||
|
|
||||||
|
前缀和
|
||||||
|
```c
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n = 0, m = 0, ret_ver = 0, ret_hor = 0;
|
||||||
|
|
||||||
|
// 读取行和列的值
|
||||||
|
scanf("%d%d", &n, &m);
|
||||||
|
// 动态分配数组a(横)和b(纵)的空间
|
||||||
|
int *a = (int *)malloc(sizeof(int) * n);
|
||||||
|
int *b = (int *)malloc(sizeof(int) * m);
|
||||||
|
|
||||||
|
// 初始化数组a和b
|
||||||
|
for (int i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
a[i] = 0;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < m; i++)
|
||||||
|
{
|
||||||
|
b[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取区块权值并计算每行和每列的总权值
|
||||||
|
for (int i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < m; j++)
|
||||||
|
{
|
||||||
|
int tmp;
|
||||||
|
scanf("%d", &tmp);
|
||||||
|
a[i] += tmp;
|
||||||
|
b[j] += tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算每列以及每行的前缀和
|
||||||
|
for (int i = 1; i < n; i++)
|
||||||
|
{
|
||||||
|
a[i] += a[i - 1];
|
||||||
|
}
|
||||||
|
for (int i = 1; i < m; i++)
|
||||||
|
{
|
||||||
|
b[i] += b[i - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化ret_ver和ret_hor为最大可能值
|
||||||
|
ret_hor = a[n - 1];
|
||||||
|
ret_ver = b[m - 1];
|
||||||
|
|
||||||
|
// 计算按行划分的最小差异
|
||||||
|
int ret2 = 0;
|
||||||
|
while (ret2 < n)
|
||||||
|
{
|
||||||
|
ret_hor = (ret_hor > abs(a[n - 1] - 2 * a[ret2])) ? abs(a[n - 1] - 2 * a[ret2]) : ret_hor;
|
||||||
|
// 原理同列,但更高级
|
||||||
|
ret2++;
|
||||||
|
}
|
||||||
|
// 计算按列划分的最小差异
|
||||||
|
int ret1 = 0;
|
||||||
|
while (ret1 < m)
|
||||||
|
{
|
||||||
|
if (ret_ver > abs(b[m - 1] - 2 * b[ret1]))
|
||||||
|
{
|
||||||
|
ret_ver = abs(b[m - 1] - 2 * b[ret1]);
|
||||||
|
}
|
||||||
|
ret1++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出最小差异
|
||||||
|
printf("%d\n", (ret_ver <= ret_hor) ? ret_ver : ret_hor);
|
||||||
|
|
||||||
|
// 释放分配的内存
|
||||||
|
free(a);
|
||||||
|
free(b);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
Reference in New Issue
Block a user