本文共 1261 字,大约阅读时间需要 4 分钟。
为了优化给定的代码,我们进行了以下步骤:
简化循环结构:合并了传入数据处理的两个循环为一个,减少了重复遍历数组的代码量。
优化变量命名:将复杂的变量名称进行重新命名,以提高代码的可读性,确保变量的含义更加明确。
去掉不必要的注释:对于次要的注释和对问题描述的重复说明,进行了精简,以让代码更加简洁。
提高变量命名准确性:确保变量名能够准确反映其含义,例如,将sum
改为更具描述性的名称。
删除冗余代码:审查代码并删除了不必要的部分,确保代码简洁高效。
以下是优化后的代码:
#includeusing namespace std;const int N = 1e6 + 10;struct Node { int o, r, c; //'clock as 'c' for (o-r)};bool cmp(Node a, Node b) { // Using a comparator function return a.c > b.c;}int main() { int n; scanf("%d", &n); struct Node a[N]; for (int i = 0; i < n; ++i) { int o, r; scanf("%d%d", &o, &r); a[i].o = o; a[i].r = r; a[i].c = o - r; } sort(a, a + n, cmp); int sum = 0, maxn = 0; for (int i = 0; i < n; ++i) { if (sum + a[i].o > maxn) { maxn = sum + a[i].o; } if (sum > maxn) { maxn = sum; } sum += a[i].r; } printf("%d\n", maxn); return 0;}
逐行解释:
代码开始:包含常用头文件,导入必要的命名空间,并定义了常量N
作为数组的大小最大值。
结构体定义:Node
结构体用于存储每个节点的三个属性o
、r
及其差值c
。
比较函数:cmp
函数以c
值降序排序,确保较大的c
(即更优化的节点)排列在前面。
主函数:读取输入n
,邻近结构体数组a
,逐个读取每个节点的o
和r
值,并计算c
值。
排序:使用自定义比较函数对节点按照c
值降序排序。
计算最大值部分:初始化sum
和maxn
。通过遍历排序后的节点,在每次处理节点时,更新maxn
的值。sum
总和加上当前节点的r
值并逐次更新,以反映此时已经处理完的所有节点的关系。
输出结果:打印最终的最大值。
这种优化后的代码保留了原有算法的核心逻辑,但使其更加高效、简洁,并提高了可读性。
转载地址:http://gfaoz.baihongyu.com/