如何确定数组是否包含单独数组中的所有整数

2023-11-25

我在学校的计算机科学课上,我被这个问题困扰了。甚至无法真正想出如何解决它的想法。

这里是逐字逐句: 编写一个名为的静态方法contains接受两个整数数组 a1 和 a2 作为参数,并返回一个布尔值,指示 a2 的元素序列是否出现在 a1 中(true 表示是,false 表示否)。 a2 中的元素序列可以出现在 a1 中的任何位置,但必须连续且以相同的顺序出现。例如,如果名为 list1 和 list2 的变量存储以下值:

int[] list1 = {1, 6, 2, 1, 4, 1, 2, 1, 8};
int[] list2 = {1, 2, 1};

然后调用contains(list1, list2)应该返回 true,因为 list2 的值序列{1, 2, 1}包含在 list1 中,从索引 5 开始。如果 list2 已存储值{2, 1, 2}, 的呼唤contains(list1, list2)将返回 false,因为 list1 不包含该值序列。任何两个具有相同元素的列表都被视为相互包含,因此诸如contains(list1, list1)应该返回 true。

您可以假设传递给您的方法的两个数组的长度都至少为 1。您不能使用任何字符串来帮助您解决此问题,也不能使用生成字符串的方法(例如 Arrays.toString)。

如果有人能指出我正确的方向,那就太好了。

这也是我想出的一种尝试,但它没有足够数量的测试

public static boolean contains(int[] set1, int[] set2) {
    boolean contains = false;
    for (int i = 0; i < set1.length; i++) {
        for (int a = 0; a < set2.length - 1; a++) {
            if (set1[i] == set2[a] && set1[i + 1] == set2[a + 1]) {
                contains = true;
            } else {
                contains = false;
            }
        }
    }
    return contains;
}

这是执行此操作的递归方法:

public static boolean contains(int[] set1, int[] set2) {
    //System.out.println(Arrays.toString(set1) + " " + Arrays.toString(set2));

    //set 2 cannot be contained within set 1 because there aren't 
    //enough elements. This either means that we recursed too deep
    //within the first set that there are not enough elements, or
    //there were not enough elements to begin with.
    if (set1.length < set2.length) return false;

    //from the start of each set, count the number of matches in order
    int numMatched = 0;
    while (numMatched < set2.length && set1[numMatched] == set2[numMatched]) {
        numMatched++;
    }

    if (numMatched == set2.length) 
        //the number of matches found equals the length of the set to
        //search for, so we have found a match. Return true to unravel
        //the recursion.
        return true;
    else {
        //we didn't find a match, so shift the array by 1 and then
        //recursively call this function to compare again.
        int[] subset = Arrays.copyOfRange(set1,  1,  set1.length);
        return contains(subset, set2);
    }

}

每次我们找不到匹配序列时,我们都会创建数组的一个子集(不包括第一个元素),并将其传递回 contains 以继续检查。以下是每次迭代的输出:

第一次:set1= [1, 6, 2, 1, 4, 1, 2, 1, 8] 且 set2 = [1, 2, 1] 在数组的开头没有找到匹配项(我们在比较 6 和 2 时中断。下一个递归调用是这样的:

设置1= [6,2,1,4,1,2,1,8],[1,2,1]

下一个递归比较 [2, 1, 4, 1, 2, 1, 8] [1, 2, 1]

依此类推,直到最终递归比较: [1, 2, 1, 8] [1, 2, 1] 并按顺序查找匹配项。

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

如何确定数组是否包含单独数组中的所有整数 的相关文章

随机推荐

  • 如何在 R 包之间共享基于 Rcpp 的库中的 C++ 函数?

    我正在 Rcpp 中开发一个简单的库 用于构建霍夫曼树 它有一个工作 R 接口 我可以从其他包调用 但我也想直接从我正在开发的其他基于 Rcpp 的包中的 C 代码调用 C 函数 我已经弄清楚如何将第一个包的标头放入inst include
  • 如何在 geckodriver 中永久安装扩展

    我需要使用扩展来测试 Firefox 我想自动化测试并访问几个网站 我安装了 Selenium 它打开于geckodriver 但是 扩展名不存在 我可以从手动安装它about debugging但问题是我希望 Selenium 测试在扩展
  • 通过ajax提交时如何获取nicEdit表单的内容?

    所以我想做的是使用 jQuery 的 AJAX 功能提交表单 我选择的路线是使用 form serialize 然后将其作为 GET 请求传递 在我添加我将在网站上使用的编辑器 NicEdit 之前 一切都非常顺利 我研究过这个问题 情况是
  • 如何从另一个控件中绑定到自定义控件按钮可见性

    我有一个自定义控件 其中有一个按钮
  • “您尝试执行不包含指定聚合函数的查询”

    SELECT SUM orders quantity AS num fName surname FROM author INNER JOIN book ON author aID book authorID 我不断收到错误消息 您试图执行一
  • 如何获取应用了我的自定义属性的成员?

    我正在创建一个自定义属性在 C 中 我想根据属性是应用于方法还是应用于属性来执行不同的操作 起初我想做new StackTrace GetFrame 1 GetMethod 在我的自定义属性构造函数中查看什么方法称为属性构造函数 但现在我不
  • 如何将日期转换为 yyyy-MM-dd 格式?

    2012 年 12 月 1 日星期六 00 00 00 GMT 我必须将上面的日期转换为下面的格式 2012 12 01 我怎么能够 我尝试过以下方法 但它不起作用 public Date ConvertDate Date date Dat
  • 使用 javascript 更改

    我有多个音频文件 我想根据用户选择进行流式传输 我怎么做 这是我到目前为止所拥有的 但似乎不起作用 更新 做了一些更改 现在声称audio load 不是一个函数 谁能告诉我这是为什么 本准则已更新以反映这些变化 JavaScript fu
  • Unity IAP 未初始化

    我使用 Unity 购买者脚本 在 Unity 的 IAP 示例中 来测试 IAP 但它们在测试期间不会在手机上初始化 即使它们确实初始化并传递到编辑器中 我知道 Unity 编辑器总是通过 IAP 因此这意味着我没有在 Apple 方面采
  • 从控制器生成 http post 请求

    如果这是一个愚蠢的问题 请原谅我 我对网络编程不太有经验 我正在实现 net mvc 应用程序的支付组件 该组件与外部支付服务交互 支付服务接受以下形式的http post请求 http somepaymentservice com pay
  • 如何在 Struts 2 中使用具有两个条件的

    我迭代项目列表 如果元素的状态等于学生或教师 则需要显示特定的下拉列表 以下代码显示所有字段 但不显示任何元素的下拉列表
  • malloc 未定义

    我目前正在重写链表模块 并且收到一些奇怪的错误 在两个 IDE Netbeans 和 Visual Studio Express 中 我收到一条警告 malloc未定义 并且在 linkedlist c 文件中找到的函数也未定义 下面是我的
  • 如何使用 javascript_include_tag 获取文件夹中的所有脚本

    我想用javascript include tag使用递归获取所有与视图相关的脚本 将其放置在public javascripts views 我想javascript include tag views recursive gt true
  • Java 8矩阵*向量乘法

    我想知道是否有一种更简洁的方法可以在 Java 8 中使用流执行以下操作 public static double multiply double matrix double vector int rows matrix length in
  • 如何在我的 HTTP 请求中使用带有身份验证的代理?

    我有一个代理 IP 地址 还需要用户名和密码 当我尝试使用它们访问网页时 我收到 需要代理身份验证 我发现了 2016 年的另一篇 Stackoverflow 帖子 以及这个已关闭的 Github 问题 但他们没有提供任何有用的东西 代理
  • 使用 ASP NET MVC 4 和 webapi 自定义 http 处理程序和路由处理程序

    我正在开发 ASPNET MVC 4 和 WebApi webapi 方法将由移动设备使用 我们需要保护服务的安全 而我们正在使用的是以某种特定方式加密数据 现在 我需要在到达控制器之前解密该调用 如果解密的信息有效 它应该像平常一样继续发
  • Apache 2.4“..身份验证失败..:密码不匹配”

    我在 Windows Server 2008 R2 中运行 Apache 2 4 我正在尝试用密码保护子目录 并在 Apache 2 0 中成功做到了这一点 升级后 我采纳了 Apache 的建议 并尝试将身份验证配置放入 httpd co
  • 如何防止android对讲说话seekbar进度

    我有一个自定义控件扩展SeekBar 其中我已经覆盖了onInitializeAccessibilityNodeInfo如下 Override public void onInitializeAccessibilityNodeInfo Ac
  • 在C#中用鼠标画线的正确方法是什么

    这是我的绘图代码 用于用鼠标在图表上绘制自定义线条 你能帮我以正确的方式做吗 namespace Grafi public partial class Form1 Form bool isDrawing false Point prevPo
  • 如何确定数组是否包含单独数组中的所有整数

    我在学校的计算机科学课上 我被这个问题困扰了 甚至无法真正想出如何解决它的想法 这里是逐字逐句 编写一个名为的静态方法contains接受两个整数数组 a1 和 a2 作为参数 并返回一个布尔值 指示 a2 的元素序列是否出现在 a1 中