当前位置: 首页 > 知识库问答 >
问题:

2d数组中垂直线的最小和

常培
2023-03-14

我有一个2D数组

行数=H
列数=W
2d数组本身=arr
它们都是整数

我的任务是返回从第一行的每个点开始的垂直线的最小和

输入

1 2 3
4 5 6
7 8 9

输出12

我曾想过使用递归来解决这个问题,但没有得到正确的结果。

函数取数组,我要计算的最小和的位置是(应该在第一行,因为它是一行)列数和行数,res是返回res的和,res在主函数中由arr在x行和y列初始化

我对这个想法很有把握,但我的总结方式可能是错误的

static int Summ(int [,]arr,int x,int y,int W,int H,int res)
    {
        if (x == H - 1)
            res += arr[x, y];
        else
            if (y == 0)
                res += Math.Min(Summ(arr, x + 1, y, W, H, res), Summ(arr, x + 1, y + 1, W, H, res));
            else if (y== W-1)
                res += Math.Min(Summ(arr, x + 1, y, W, H, res), Summ(arr, x + 1, y - 1, W, H, res));
            else 
                res+= res += Math.Min(Math.Min(Summ(arr, x + 1, y, W, H, res), Summ(arr, x + 1, y + 1, W, H, res)),Summ(arr,x+1,y-1,W,H,res));
        return res;
    }

共有1个答案

杜元明
2023-03-14

迭代解决方案可能更简单:

static int MinSum(int [,]arr)
{
    int min = Int32.MaxValue;

    for (int j = 0; j < arr.GetLength(1); ++j) 
    {
        int sum = 0;
        for (int i = 0; i < arr.GetLength(0); ++i)
        {
            sum += arr[i, j];
        }
        min = Math.min(min, sum);
    }

    return min;
}

编辑:
根据下面评论中的说明,此解决方案不正确
相反,您可以迭代各行并求每行中的最小值之和:

static int MinSum(int [,]arr)
{
    int sum = 0;

    for (int i = 0; j < arr.GetLength(0); ++i) 
    {
        int minCol = arr[i, 0];
        for (int j = 1; j < arr.GetLength(1); +_j)
        {
            minCoal = Math.min(minCol, arr[i, j]);
        }
        min += minCol;
    }

    return sum;
}
 类似资料:
  • 问题内容: 我想输出二维数组的最大值和最小值。Max可以很好地工作,但是即使在数组中没有零的情况下min也总是输出零。在本例中,我设置为99以防止较小的机会在数组中获得零。继承人完整代码: 问题答案: 由于您在中选择随机值的方式,不会存在小于零的值- 但也无法保证任何值都将恰好为零。但是,您将初始化为零,因为这是数组元素的默认值;没有什么比这更小了,所以答案总是零。 您应该在标记为“查找最小值”的

  • 问题内容: 我想删除图像中显示的行。我该如何删除? 问题答案: jqGrid在主网格表上构建了一些其他div。外部div具有class 。因此,如果需要删除整个网格上存在的左右边界,则可以使用以下CSS: 如果需要删除所有网格边框,可以使用 如果您还需要删除网格中单元格之间的垂直边框,则可以使用 要删除行之间的水平边框,可以使用 要删除列标题之间的垂直边框,可以使用 或替代(不使用)

  • 基本上,我要问的是给定一个正方形2D阵列和一个有效的补丁大小(2D子阵列的大小),我将如何做到这一点。最终,我不需要以任何方式存储子阵列,我只需要找到每个子阵列的中值并将它们存储在一个一维阵列中。中值和存储到新阵列对我来说很简单,我只是不知道如何处理原始2D阵列并正确拆分它。我已经尝试了几次,但一直出现越界错误。我有一个4x4: 我需要像这样拆分它 < code>[1,2] [3,4] [2,3]

  • 所以我在我的Mac上安装了VS代码,它运行得非常好。屏幕上只有一条白色的垂直线,有点烦人。 我不确定它应该是某种指南、标尺还是什么。它从一开始就出现了。有办法禁用它吗? 看起来是这样的:

  • 我需要得到一条三次(2D)bezier曲线B(t)的点Q,其中从点Q到另一个给定点P的直线与bezier曲线垂直相交。 我知道:P,B(t) 我寻找:Q(基本上我想要g的斜率,但当我知道Q时,我可以很容易地计算出来,但g的斜率已经足够了) 注意,我认为这个ansatz是错误的。这只是为了完整性而包括的。 其中B(x)是笛卡尔坐标系下的bezier曲线,B'(x)是(笛卡尔坐标系下的)导数,k是与y