You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言用指针算术查找二维数组列最大值并替换的优化咨询

优化实现方案

优化说明

原有方案需要重复编写5次逻辑,且每次遍历全量25个元素筛选目标列,效率较低。优化后外层套列循环即可覆盖所有列,同时按内存偏移直接访问目标列元素,无需遍历全矩阵:

  1. 按C语言二维数组内存连续存储的特性,第row行第col列的元素偏移量为 row * 5 + col,直接通过指针算术访问即可
  2. 每处理一列前重置最大值临时变量,避免未初始化或上一列结果的干扰
  3. 支持两种实现版本,可按需求选择

全量最大值替换版本(一列有多个相同最大值时全部替换)

#include <float.h>

// 原有矩阵初始化逻辑保持不变
double array2d[5][5];
double *ptr = array2d[0];
// 初始化矩阵
for (int i = 0; i < 5; ++i) {
    for (int j = 0; j < 5; ++j) {
        if (j % 2 != 0) {
            array2d[i][j] = (i + 1) - 2.5;
        } else {
            array2d[i][j] = 2 * (i + 1) + 0.5;
        }
    }
}

// 优化后的处理逻辑
for (int col = 0; col < 5; col++) {
    double maxTemp = DBL_MIN;
    // 查找当前列最大值
    for (int row = 0; row < 5; row++) {
        double current = *(ptr + col + row * 5);
        if (current > maxTemp) {
            maxTemp = current;
        }
    }
    // 替换当前列所有最大值为-1
    for (int row = 0; row < 5; row++) {
        double *current_p = ptr + col + row * 5;
        if (*current_p == maxTemp) {
            *current_p = -1;
        }
    }
}

单最大值替换版本(仅替换第一个/唯一一个最大值,性能更高)

如果每列仅存在一个最大值,无需二次遍历,查找最大值时直接记录指针位置即可:

#include <float.h>

// 矩阵初始化逻辑同上
for (int col = 0; col < 5; col++) {
    double maxTemp = DBL_MIN;
    double *max_p = NULL;
    for (int row = 0; row < 5; row++) {
        double *current_p = ptr + col + row * 5;
        if (*current_p > maxTemp) {
            maxTemp = *current_p;
            max_p = current_p;
        }
    }
    if (max_p != NULL) {
        *max_p = -1;
    }
}

内容的提问来源于stack exchange,提问作者Ruby Rain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:57:03