如何在 Java 中查找 2D 数组中的子数组是否具有特定的和?

2024-01-05

我试图通过比较源图像和图案图像中存在的像素的平均颜色来解决图像匹配问题。我已将这个问题简化为子数组求和问题,但无法找到解决方法。

假设我有一个包含所有正整数的二维数组 ARR。我有一个数字 x(它是小图案图像中存在的像素颜色的平均值)。我只需要在 ARR 中找到具有精确总和 x 的任何子数组。我发现了一个类似的问题,可以通过动态编程来解决这里。

http://www.geeksforgeeks.org/dynamic-programming-set-27-max-sum-rectangle-in-a-2d-matrix/ http://www.geeksforgeeks.org/dynamic-programming-set-27-max-sum-rectangle-in-a-2d-matrix/

但这是关于寻找一个子数组最大总和而不是已经给出的金额。



So if this the given array.

3   4   8   9   3
2   10  4   2   1
8   1   4   8   0
3   5   2   12  3
8   1   1   2   2

And if the given sum is 19, then it should return this window

3   4   8   9   3
2   10  4   2   1
8   1   4   8   0
3   5   2   12  3
8   1   1   2   2

And if the given sum is 23, then it should return this window

3   4   8   9   3
2   10  4   2   1
8   1   4   8   0
3   5   2   12  3
8   1   1   2   2
    
  

我怎样才能有效地找到这个?这里可以使用动态规划吗?请帮我一下。


使用相同的原理,但解决更简单的问题。首先,我预先计算每个的累积和column数组的,即 A[i][j] += A[i-1][j]。

然后,对于每对开始/结束行 (i1, i2),我将它们视为单个数组 B[j],这意味着 B[j] = A[i2][j] - A[i1-1][ j]。然后,我们需要找到具有精确总和的子数组。由于该数组仅由正数组成,因此我可以在 O(n) 内找到它。

总的来说,这个算法的复杂度是O(n^3)。

对于您提供的值,我能够找到一些附加数组:

对于目标 = 19:

Found between (0,0) and (1,1)
Found between (0,3) and (2,4)
Found between (0,2) and (4,2)
Found between (1,1) and (2,2)
Found between (1,2) and (2,4)
Found between (2,0) and (4,0)
Found between (3,3) and (4,5)

目标 = 23:

Found between (0,2) and (1,3)
Found between (0,3) and (2,4)
Found between (2,0) and (3,2)
Found between (2,3) and (3,4)
Found between (3,1) and (4,4)

我使用的代码:

public static void main(String[] args) {
    int[][] A = {
            {3, 4, 8, 9, 3},
            {2, 10, 4, 2, 1},
            {8, 1, 4, 8, 0},
            {3, 5, 2, 12, 3},
            {8, 1, 1, 2, 2},
    };

    int target = 19;

    for (int i = 1; i < A.length; i++)
        for (int j = 0; j < A[i].length; j++)
            A[i][j] += A[i - 1][j];


    for (int i1 = 0; i1 < A.length; i1++) {
        for (int i2 = i1 + 1; i2 < A.length; i2++) {
            int j1=0, j2=0, s=0;

            while(j2<A[i1].length) {
                while(s<target && j2<A[i1].length) {
                    s += A[i2][j2] - (i1 > 0 ? A[i1-1][j2] : 0);
                    j2++;
                    if (s==target)
                        System.out.println(String.format("Found between (%d,%d) and (%d,%d)", i1, j1, i2, j2-1));
                }
                while(s>=target) {
                    s -= A[i2][j1] - (i1 > 0 ? A[i1-1][j1] : 0);
                    j1++;
                    if (s==target)
                        System.out.println(String.format("Found between (%d,%d) and (%d,%d)", i1, j1, i2, j2));
                }
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中查找 2D 数组中的子数组是否具有特定的和? 的相关文章

随机推荐

  • css:chrome 的 -moz-线性渐变 相当于什么

    我有类似的CSSbackground moz linear gradient center top 59a1d8 27247D repeat scroll 0 0 0f78c7 对于我的按钮来说 这对我来说在 mozilla 中很好 但在c
  • Spring 中 REST 控制器的异常处理程序

    我想处理异常 以便 URL 信息自动显示给客户端 是否有捷径可寻
  • Utf8Json根据标记字段反序列化为类型

    With Json NET Newtonsoft我已成功使用自定义合约反序列化器和 json 转换器来根据标签选择反序列化器 在下面的情况下 ev 总之我希望实现同样的目标Utf8Json 完整详细信息如下 Stocks TRADE ev
  • IntelliJ Scala 配置问题

    所以 我下载了 Scala 并配置了路径 我可以从终端运行 Scala 控制台 Scala 插件已安装并且 你好世界 正在运行 问题是 当我编写 hello world 程序时 object First def main args Arra
  • 使用 Hive、S3、EMR 和恢复分区加载数据

    SOLVED 请参阅下面的更新 2 了解此问题的 解决方案 在 s3 中 我有一些 log gz 文件存储在嵌套目录结构中 例如 s3 BUCKET y 2012 m 11 d 09 H 10 我正在尝试使用多级分区规范将它们加载到 Ela
  • 创建本地和实例对象时出现 java StackOverflowError

    大家好 有人可以解释一下为什么这段代码会给我 StackOverflowError 错误吗 如果您能解释 instanceObj 初始化并调用 ObjectTest 构造函数和 java lang Object 构造函数时发生的情况 我真的
  • 在python中将具有多个值的字典键映射到json

    我正在尝试将一个具有多个值的键的字典映射到 python 中 这是我得到的 import json list abe matt roscoe key name nodes nodes setdefault key list abe matt
  • 如何为 ASP.NET MVC2 母版页提供独立于控制器的模型

    我在 ASP NET MVC2 下使用强类型视图和 autofac 进行依赖注入 并且尝试通过依赖注入获取通用动态标头 IE 我希望这种情况发生 即使视图已经存在 也不必离开该内容 我希望避免容器的静态发现和手动解析 但我找不到一种方法来轻
  • 结合 Knockout.js + KendoUI - 您的经验是什么?

    所以我看到 KendoUI 包含了与 Knockout js 集成的示例 http demos kendoui c om web integration index html http demos kendoui com web integ
  • 当用户选择不购买iOS应用内购买中的商品时,如何自定义错误处理?

    例如 当用户在应用内购买过程中要求登录时 他们可以单击 取消 按钮 然后应用程序将鞋 Can t connect to the iTunes Store 是否可以使用我们自己的回调来代替这个标准消息 我相信您不会收到 无法连接到 iTune
  • 从 App Engine 发送 HTTP 请求

    是否可以从我的 AppEngine 应用程序发送 HTTP 请求 我需要提出一些请求并从其他站点提取一些数据 是的 更多信息请点击这里 http code google com appengine docs python urlfetch
  • 添加 LTV 签名后,某些 pdf 文件已损坏

    我正在尝试在数字签名文档中添加 LTV 在某些文件中 它工作正常 但在某些文件中 它不起作用 我附上所有文件以供参考 我的 LTV 添加代码链接如下https github com akr pdftimestamp https github
  • 上下文包与完成通道以避免 goroutine 泄漏

    有两种不同的方法来清理 goroutine 使用kill 通道来发出取消信号 并使用done 通道来指示goroutine 已终止 type Worker struct Done chan struct Kill chan struct J
  • Tesseract 不使用路径变量

    为什么我的 Tesseract 实例要求我显式设置数据路径 但不想读取环境变量 让我澄清一下 运行代码 ITesseract tesseract new Tesseract String result tesseract doOCR myI
  • 使用react-pdf和react-chartjs-2生成pdf

    我环顾四周 但似乎找不到任何一起使用这两个库的示例 我的项目当前使用react pdf 生成pdf 报告 但我需要将chartjs 图表添加到我们将生成的一些新文件中 我不想使用两个不同的 pdf 库 也不必重新编码应用程序的某些部分以匹配
  • 在 Ubuntu 12.04 上完全删除并全新安装 python

    承认这一点很尴尬 但我只是继续努力在 Ubuntu 安装上设置我的 Python 环境 有时我让它工作得很好 但问题是 我觉得每当我坐下来对 python 项目进行一些业余爱好时 我最终都会花费几个小时来解决与我的 python 安装不一致
  • c# .NET CORE 使用 ITextSharp 将透明图像添加到现有 PDF

    我的目标是在现有 pdf 的每一页上添加公司徽标 不是水印 由于 pdf 文件和徽标的具体情况 我只能将徽标放置在 pdf 内容的顶部 而不是下面 并且徽标必须支持透明度 还有一个限制是我必须使用 NET Core 发布此内容并给出答案 因
  • Excel 中的错误消息

    在将 Excel ApplicationClass 的 DisplayAlerts 属性设置为 false 时 我遇到了以下错误的紧急问题 var excel new Excel Application excel DisplayAlert
  • Silverlight图像编辑器控件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 您是否知道任何 Silverlight 图像编辑器 控件 商业或开源 主要功能要求 裁剪 调整大小 旋转图像 设置背景颜色 插入文字 插入
  • 如何在 Java 中查找 2D 数组中的子数组是否具有特定的和?

    我试图通过比较源图像和图案图像中存在的像素的平均颜色来解决图像匹配问题 我已将这个问题简化为子数组求和问题 但无法找到解决方法 假设我有一个包含所有正整数的二维数组 ARR 我有一个数字 x 它是小图案图像中存在的像素颜色的平均值 我只需要