将数组分为 2 个子数组并检查乘法是否相等

2024-03-01

我正在为 Java 考试进行练习。 我今天面临的问题之一是: 给定一个包含 n 个数字的数组,我需要检查是否有 2 个子数组(不必相等)它们的乘法相等 - 如果有,将返回 true,否则返回 false。 例如 : 如果数组是:{2,15,3,4,2,5} - 将返回 True 如果数组是:{2,4,6,2,3,4} - 将返回 False。

答案必须是递归的,没有任何循环。

所以我想,如果有2个子数组,它们的乘法相等,则意味着整个数组的总乘法必须是平方根数。例如,在第一个数组中,它是 3600,即 60。

到目前为止,我找不到任何它不起作用的情况,但仍然不能 100% 确定它会涵盖所有可能的情况。

这是我的代码:

    public static boolean splitEqualMult(int[] a) {
      double multi = isArrSqrt(a,0);

      if(Math.sqrt(multi) == Math.floor(Math.sqrt(multi))) {
          return true;
    }

    return false;
}

private static double isArrSqrt(int[] a, int i) {

    if(i == a.length) {
        return 1;
    }

    return a[i] * isArrSqrt(a,i+1);
}

希望听到您的想法!


您的解决方案给出了误报。例如,数组{2,8}不能分成两个积相等的子数组,但你会返回true,因为 2*8 的平方根是 4。

当您尝试解决此类递归问题时,您应该尝试思考如果将输入大小减少 1 会发生什么。

假设给定一个数组arr具有有效的分割(分成两个具有相同乘积的子组)。这意味着如果删除第一个元素a[0],您必须能够将数组的其余部分分成两个子组,以便p1 == p2 * a[0] or p1 == p2 / a[0], where p1是第一组元素的乘积,p2是第二组元素的乘积。

这表明递归方法应该检查输入数组的给定尾部(即 arr[from]...arr[arr.length-1] 对于某些 from >= 0)是否存在分成两组,例如第一组的乘积除以第二组的乘积(反之亦然)等于给定因子:

public static boolean canSplit(int[] arr, int from, double factor)
{
    if (from == arr.length - 1) {
        return arr[from] == factor;
    }
    return canSplit(arr, from + 1, factor * arr[from]) || canSplit(arr, from + 1, factor / arr[from]);
}

初始调用将是:

public static boolean canSplit(int[] arr)
{
    if (arr.length < 2) {
        return false;
    } else {
        return canSplit(arr, 0, 1); // the second parameter is 0, since the first recursive call
                                    // applies to the whole array
                                    // the third parameter is 1, since we want to check if there 
                                    // are two groups such that the product of the first divided
                                    // by the product of the second is 1 (i.e. the two products
                                    // are equal)
    }
}

Tests:

System.out.println (canSplit(new int[]{2,15,3,4,2,5}));
System.out.println (canSplit(new int[]{2,4,6,2,3,4}));
System.out.println (canSplit(new int[]{2,2,4}));
System.out.println (canSplit(new int[]{2,8}));

Output:

true
false
true
false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数组分为 2 个子数组并检查乘法是否相等 的相关文章

  • Hibernate 自定义架构创建

  • 谁能解释一下 servlet 映射吗?

    我正在尝试使用 SpringMVC 编写一个 Web 应用程序 通常我只是将一些虚构的文件扩展名映射到 Spring 的前端控制器并快乐地生活 但这次我要使用类似 REST 的 URL 没有文件扩展名 将我的上下文路径下的所有内容映射到前端
  • eclipse juno 打开时出错

    在安装 Eclipse 并正常工作一年多后 我今天打开 Eclipse Juno 并在打开工作区时收到一条错误消息 我使用的是 Windows 8 64 位 Java 64 位和 Eclipse 64 位 此后我尝试重新安装 Java 和
  • Jackson Json 将对象反序列化为列表

    我正在使用 Spring 的 Web 服务RestTemplate并反序列化Jackson 在来自服务器的 JSON 响应中 其中一个字段可以是对象或列表 这意味着它可以是 result or result 有没有办法通过对我要反序列化的类
  • 无法从 TemporalAccessor 获取 OffsetDateTime

    当我这样做时 String datum 20130419233512 DateTimeFormatter formatter DateTimeFormatter ofPattern yyyyMMddHHmmss withZone ZoneI
  • RSA 加密-解密:BadPaddingException:数据必须以零开头

    对于一个被问了很多次的问题 我很抱歉向您询问您的技能 我有一个关于 RSA 加密的问题 我已经检查过有关此问题的其他主题 但没有找到任何有用的答案 我希望你能帮助我 我想读取一个文件 加密其内容 然后解密它并将这些解密的字节放入一个新文件中
  • GSON:自定义对象反序列化

    好吧 我编辑了这个问题 因为它不够清楚 Edit 2 更新了 JSON 文件 我在 Android 应用程序中使用 GSON 我需要解析来自服务器的 JSON 文件 而且有点太复杂了 我不想让我的对象结构太重 所以我想简化内容 所以我的对象
  • 如何在 Java 中安装附加包?

    我对 Java 很陌生 我想使用名为的包中的一些功能daj 教程代码有以下几行 import daj import java util import java lang Math import Msg 但第一行和第四行会产生红色下划线 导致
  • 可以向 @ManyToMany Hibernate 额外表添加额外字段吗?

    我有这两类 表 Entity Table name course public class Course Id Column name courseid private String courseId Column name coursen
  • 将二进制数据的 byte[] 转换为 String

    我有二进制格式的数据 hex 80 3b c8 87 0a 89 我需要将其转换为字符串 以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中 我知道 我不打算在 Java 中使用 String 来存储二进制数据 但
  • Java 泛型和数字类型

    我想创建一个通用方法来有效地执行此操作 class MyClass static
  • 如何连接hibernate和DB2

    我正在运行一个使用 struts 和 hibernate 的应用程序 我目前正在使用 Derby 数据库 现在我必须转向 DB2 数据库 请告诉我 我必须做什么配置 休眠配置文件 我必须设置任何类路径吗 多变的 我知道 DB2 有两个 ja
  • 获取证书链

    我正在 Java 中使用 X509 证书 给定一个证书 是否可以在签名层次结构中找到所有其他证书 直到找到根证书 我有一个证书文件 带有 cer扩展名 我想提取父签名证书 我想继续查找该证书的父证书 直到获得最终的自签名根证书 我已经检查了
  • WebSocketStompClient 将无法连接到 SockJS 端点

    我正在尝试新的 从版本 4 2 开始 java STOMP 客户端支持 我的出发点是入门指南 使用 WebSocket 构建交互式 Web 应用程序 http spring io guides gs messaging stomp webs
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • Spring Boot如何加入自定义查询

    我需要创建一个端点 该端点按州返回人口普查数据以及城市列表 我目前使用两个端点来获取此数据 目前回应 自定义查询一 censusByState id 1 code 11 name Rond nia statePopulation 18152
  • 如何将多部分文件从另一个服务发送到一个服务

    我有两个端点 api 它们是 uploadand 重定向 upload是我直接上传文件的地方 重定向是我接收文件并将其传递给上传并获取 JSON 响应的地方 upload 所以下面是我的代码 package com example impo
  • 如何正确使用Google Calendar API Events.Insert命令?

    所以我一直使用REST方法来调用Google的API 我需要将事件插入到我拥有 ID 的特定日历中 这是我发送的 POST 请求 地址 https www googleapis com calendar v3 calendars https
  • 根据 Java 环境变量中的值创建使用 @JsonIgnore 的自定义注释

    我需要创建一个新的注释 用于在环境变量设置时忽略输出 JSON 文件中的字段var false 我尝试使用JsonAnnotationIntrospector 但无法获得预期的输出 public class Vehicle String v
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i

随机推荐

  • 重定向或渲染后不显示 Flash 消息

    使用 Rails 4 和 ruby 2 无法显示来自我的控制器的闪烁消息 我的方法如下所示 def create salary report SalaryReport create salary report params if salar
  • .NET Web API CORS 预检请求

    我在向其他域上的 Web API 发出 PUT 和 DELETE CORS 请求时遇到一些问题 我已经通过教程编写了 APIhttp www asp net web api overview security enabling cross
  • 在 Python 中使用字节数组作为 AES 算法的密钥

    我有一个字节数组 它是 128 位 AES 密钥 我想在 Python 脚本上使用该密钥 以使用上述密钥对一些信息进行加密 我将密钥存储为十六进制字符串 例如 27821D90D240EA4F56D0E7612396C69E 显然这不是真正
  • 在 Rails 中使用 check_box_tag 的自定义 id

    在 Rails 中使用 check box tag 帮助器时如何设置自定义 id 我有一个循环 它根据集合创建一堆复选框 subject syllabus references each do sr check box tag questi
  • Angular 4 无法绑定到 ,因为它不是 的已知属性

    我正在尝试在 Angular 4 中创建自己的指令 但是 在将类的属性绑定到组件模板中时出现此错误 控制台错误 Unhandled Promise rejection Template parse errors Can t bind to
  • 如何在单击按钮时更改矢量可绘制路径的颜色

    随着新的 Android 支持更新 矢量绘图获得了向后兼容性 我有一个带有各种路径的矢量图像 我希望路径的颜色在单击按钮时发生变化 或者基于输入值以编程方式发生变化 是否可以访问矢量路径的名称参数 然后改变颜色 可以使用 setTint 更
  • 这是使用 jQuery 将 XML 解析为 JavaScript 对象的最快方法吗?

    我有一个像这样的 XML 文件
  • 如何从项目文档创建 GitHub 页面?

    我在 GitHub 上有一个项目 其中包含一些自动生成的 HTML 文档的目录 我想在 GitHub 的项目页面工具中使用该文档 所以 我已经阅读了有关如何操作的说明创建项目的 gh pages 根分支 http pages github
  • 以react-hook-form形式输入onChange

    我正在使用 React 构建网络应用程序反应钩子形式 https react hook form com 图书馆 我想创建表单 其中某些字段的更改会触发某些事件 所以我需要通过自定义onChange 但是 从 v7 0 开始我无法使用onC
  • 将数据库中的日期更新为 +1 个月

    我的用户中有一个日期列 我想使用 SQL 查询更新该列 通过 SQL 查询 我想在数据库中添加 1 个月至今的列 我现在有 UPDATE users SET date 1 month 当我运行此查询时 它不起作用 所以我的问题是 我怎样才能
  • “无法解析对程序集的依赖关系”错误的原因

    什么时候会显示以下消息 错误 1 未知构建错误 无法解析对程序集 Infragistics2 Win v10 3 版本 10 3 20103 2015 Culture neutral PublicKeyToken 7dd5c3163f2cd
  • Telegram Bot API:getChatMember 为有效用户抛出 USER_ID_INVALID

    我正在尝试找出是否有特定的User出现在一个超级组中 以便跟踪那些离开的人 为此 我调用 Bot API 方法getChatMember对于每个User并检查他们的状态是否是Left or Kicked 然而 我注意到 最近 我得到了USE
  • 如何从 ruby​​ 1.9.1 降级到 ruby​​ 1.8.7

    我刚刚升级到 Rails 3 但在升级之前运行的是 ruby 1 9 1 Rails 3 不支持 Ruby 1 9 1 如何降级到 ruby 1 8 7 这将从当前版本降级到 1 8 7 gem update system 1 8 7
  • TensorFlow:如何在训练期间多次评估验证数据队列?

    tl dr 如何在每 K 次训练迭代之后评估验证集 使用单独的队列进行训练和验证数据 而不需要单独使用tf Sessions在多个进程中 考虑到我的特定问题 似乎没有一种干净的方法来实现这一目标 而我当前的解决方法 我认为可行 给了我未定义
  • matlab和openCV中的hough变换错误?

    我一直在使用 Matlab 和 OpenCV labview 的应用程序中使用霍夫变换 发现对于某些图像 霍夫变换给出了明显错误的线拟合 一致 Here are the test and overlayed images The angle
  • Thymeleaf 中的标题和标题

    我是百里香初学者 我从一个通用的布局页面开始 片段 layout html div class container Some text div 和内容页面 页面 html
  • 使用 Visual Studio 的 Python 工具在 Visual Studio 中使用 Matplotlib 进行绘图

    我刚开始在 Python 代码中使用 PTVS 我之前使用过 Spyder 因为它是与 Anaconda 发行版一起提供的 这是我遇到的问题 我正在尝试创建两个图 并同时在单独的窗口中显示它们 一个简单的例子是 import matplot
  • 无法获取用于 tmux 和 OSX 的删除键

    在通过自制软件安装了 tmux 的 OSX 上 我似乎无法让 删除 键起作用 我正在使用 iterm2 并将删除映射到 H 如果没有 tmux 删除 键可以正常工作 修复 Apple M1 Pro OSX 12 4 tmux 3 3a 上的
  • 从 DDS 中删除读取主题

    我在订阅数据时遇到问题 使用java平台 当订阅者订阅某个主题时 必须从 DDS 中删除该订阅的数据 但就我而言 每当我订阅数据时 相同的数据就会被订阅多次 数据不会从 DDS 中删除 我尝试过 QoS 但不知道如何使用它 请建议我如何从
  • 将数组分为 2 个子数组并检查乘法是否相等

    我正在为 Java 考试进行练习 我今天面临的问题之一是 给定一个包含 n 个数字的数组 我需要检查是否有 2 个子数组 不必相等 它们的乘法相等 如果有 将返回 true 否则返回 false 例如 如果数组是 2 15 3 4 2 5