堆的算法在列表列表中的实现

2024-03-29

我正在使用堆算法创建一个包含所述列表的每个排列的列表列表。每个排列将是其自己的列表。当我在算法中打印它时它可以正常工作,但是当我尝试将它添加到我的列表列表中并且它们都是相同的数组(4,1,2,3)时它不能正常工作。我注释掉了我测试过的打印内容以确保它正常工作。

我当前的代码:

public static ArrayList<int[]> lists = new ArrayList<>();

public static void main(String[] args) {
    int[] list = {1,2,3,4};
    heapsAlgorithm(4,list);
    for(int i = 1; i <= lists.size(); i++) {
        System.out.println("List " + i + ": " + Arrays.toString(lists.get(i-1)));
    }
}

public static void heapsAlgorithm(int n, int[] list) {
    if (n == 1) {
        lists.add(list);
        //System.out.println(Arrays.toString(list));
    }
    else {
        for(int i = 0; i < n; i++) {
            heapsAlgorithm(n - 1, list);
            if ( n % 2 == 0) {
                int swap = list[i];
                list[i] = list[n-1];
                list[n-1] = swap;
            }
            else {
                int swap = list[0];
                list[0] = list[n-1];
                list[n-1] = swap;
            }
        }
    }
}

Working:

[1, 2, 3, 4]
[2, 1, 3, 4]
[3, 1, 2, 4]
[1, 3, 2, 4]
[2, 3, 1, 4]
[3, 2, 1, 4]
[4, 2, 3, 1]
[2, 4, 3, 1]
[3, 4, 2, 1]
[4, 3, 2, 1]
[2, 3, 4, 1]
[3, 2, 4, 1]
[4, 1, 3, 2]
[1, 4, 3, 2]
[3, 4, 1, 2]
[4, 3, 1, 2]
[1, 3, 4, 2]
[3, 1, 4, 2]
[4, 1, 2, 3]
[1, 4, 2, 3]
[2, 4, 1, 3]
[4, 2, 1, 3]
[1, 2, 4, 3]
[2, 1, 4, 3]

不正确的输出:

List 1: [4, 1, 2, 3]
List 2: [4, 1, 2, 3]
List 3: [4, 1, 2, 3]
List 4: [4, 1, 2, 3]
List 5: [4, 1, 2, 3]
List 6: [4, 1, 2, 3]
List 7: [4, 1, 2, 3]
List 8: [4, 1, 2, 3]
List 9: [4, 1, 2, 3]
List 10: [4, 1, 2, 3]
List 11: [4, 1, 2, 3]
List 12: [4, 1, 2, 3]
List 13: [4, 1, 2, 3]
List 14: [4, 1, 2, 3]
List 15: [4, 1, 2, 3]
List 16: [4, 1, 2, 3]
List 17: [4, 1, 2, 3]
List 18: [4, 1, 2, 3]
List 19: [4, 1, 2, 3]
List 20: [4, 1, 2, 3]
List 21: [4, 1, 2, 3]
List 22: [4, 1, 2, 3]
List 23: [4, 1, 2, 3]
List 24: [4, 1, 2, 3]

我假设我错误地使用了 ArrayList,但我不确定在哪里。有什么建议么?


您需要复制 int 数组。

您有一个可变的数组实例和您假设保留排列的数组列表。基本上,发生了什么:

  1. 你做排列。
  2. 您将排列添加到 ArrayList 中。
  3. 您对同一个对象进行另一个排列。
  4. 您将已在此列表中的对象添加到 ArrayList。

最后你得到了 ArrayList,其中添加了 20 次相同的 int 数组。

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

堆的算法在列表列表中的实现 的相关文章

  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • 使用 Java 在 WebDriver 中按 Ctrl+F5 刷新浏览器

    我已经使用 java 刷新了 WebDriver 中的浏览器 代码如下 driver navigate refresh 如何使用 Java 在 WebDriver 中按 Ctrl F5 来做到这一点 我认为您可以使用 WebDriver 和
  • Data.Sequence 中的 inits 和 tails 如何工作?

    Louis Wasserman 编写了当前的实现inits and tails in Data Sequence 他表示它们非常高效 事实上 只要查看代码 我就可以看到 无论它们在做什么 它们都是以干净 自上而下的方式进行的 这往往会给惰性
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • 将过滤器添加到 Eclipse 中的 Project Explorer

    我想向 Project Explorer 添加一个新的过滤器 以向用户隐藏一些在 Eclipse RCP 应用程序中自动创建的项目 到目前为止我已经找到了两个扩展点 org eclipse ui ide resourceFilters 允许
  • Java 正则表达式 - 字母数字,最多一个连字符,句点或下划线,七个字符长

    我是 Java 正则表达式工具的新手 尽管它们潜力巨大 但我很难完成这项任务 我想编写一个正则表达式来验证遵循以下语法的输入字符串 小写字母和数字的任意组合 仅一个下划线 一个破折号或一个句号 无其他特殊字符 最小长度为 5 我想出了以下解
  • 定期更新 SWT 会导致 GUI 冻结

    Problem 当 GUI 字段定期更新时 SWT 会冻结 我想要一个基于 SWT 的 GUI 其中文本字段的值会定期递增 最初我从单独的线程访问 textField 导致抛出异常 线程 Thread 0 org eclipse swt S
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何将 Observable>> 转换为 Observable>

    我陷入了如何将以下可观察类型转换 转换为我的目标类型的困境 我有以下类型的可观察值 Observable
  • 带有 OpenId 提供程序的 Java Spring 安全性

    我有一个 spring MVC 应用程序 另一个客户端应用程序想要使用 open id connect 访问我的 spring 应用程序 如何在服务器端实现开放ID提供商 请帮忙 MITREid 连接 OpenID Connect Java
  • 为什么我的代码会产生错误:该语句没有返回结果集[重复]

    这个问题在这里已经有答案了 我正在从 Microsoft SQL Server Studio 执行以下查询 该查询工作正常并显示结果 SELECT INTO temp table FROM md criteria join WHERE us
  • 使用 JAD 反编译 java - 限制

    我正在尝试使用 Java 中的 JAD 反编译几个 jar 文件 我也尝试过 JD GUI 但运气更差 但出现了很多错误 一种类型 易于修复 似乎是内部类 但我也发现了这段代码 static int SWITCH TABLE atp com
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • 二维滑动窗口最小值/最大值

    假设我们得到一个大小为 NxN 的像素整数矩阵和一个整数 k 窗口大小 我们需要使用滑动窗口找到矩阵中的所有局部最大值 或最小值 这意味着 如果某个像素与其周围窗口中的所有像素相比具有最小 最大 值 则应将其标记为最小 最大 有一种著名的滑
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 每次我们调用浏览器时,在 selenium 中使用 driver.manage().window().maximize() 是否好?

    We use driver manage window maximize 最大化浏览器 我在网上看到一些使用的例子driver manage window maximize 尽管不需要最大化浏览器 例如 gmail 登录 我还看到使用 se

随机推荐

  • java.lang.NoClassDefFoundError:Lorg/slf4j/Logger

    我正在使用具有 Maven 支持的 Intellij 启动 tomcat 一旦我添加以下 tomcat maven 依赖项
  • 制作 Sequelize 显示表格

    我正在 node js 中创建一个项目 我的页面之一将显示数据库中所有表的列表 我想知道Sequelize是否有 显示表格 之类的功能 Thanks 使用续集showAllSchemas method var sequelize new S
  • Google 风格指南(前向声明部分)

    Preface Google 风格指南列出了前向声明的缺点 前向声明可以隐藏依赖项 允许用户代码在标头更改时跳过必要的重新编译 前向声明可能会因库的后续更改而被破坏 函数和模板的前向声明可以防止标头所有者对其 API 进行其他兼容的更改 例
  • 具有可见分隔线的不可点击列表视图项目

    我想禁用列表视图项目的单击 一种解决方案是覆盖areAllItemsEnabled 始终返回 false 并且isEnabled 对于特定位置返回 false 但是 这会导致特定列表视图项周围的分隔线消失 有些人建议返回 trueareAl
  • 如何正确打印 __FILE__ 扩展为的字符串?

    考虑这个程序 include
  • 在 Ruby 脚本中运行命令行命令

    有没有办法通过 Ruby 运行命令行命令 我正在尝试创建一个小型 Rub y 程序 该程序可以通过 screen rcsz 等命令行程序拨出和接收 发送 如果我能将所有这些与 Ruby MySQL 后端等 结合起来 那就太好了 是的 有以下
  • 用于包装 JsonResult 操作响应的 .Net 过滤器

    我已经建立了一个网络 API 应用程序并发现了一个问题 目前在我的代码中处理得不好 该问题总结为包装所有内容Json从具有自定义节点 根 的所有 API 操作返回的对象 即 我有这个 json 数组 响应 Category Pages Us
  • 为什么不允许在非类型参数中进行部分特化以使用嵌套模板参数

    我有这个代码 template
  • 连接两个 std::vector

    如何连接两个std vectors vector1 insert vector1 end vector2 begin vector2 end
  • 如何在.NET Core中正确使用代码契约

    我想知道如何正确使用代码契约 NET核心 到目前为止我尝试将CC添加到我的项目中 编译和调试 我对消息感到困惑 该消息出现在每次使用的呼叫中Contract Requires 以及通过谷歌搜索找到的信息 该消息指出 必须使用代码契约二进制重
  • 如何使用 CSS 选择没有“类型”的

    我这里有3个
  • 为什么 Scala 在这种特殊情况下无法找到次要隐式值?

    我很难解释之间的行为差 异 通过主要隐式值或隐式值寻求附加隐式值 隐式转换 具体来说 这有效 trait Foo A implicit def fooString Foo String null implicit def value A i
  • 同步 Android 画廊中的照片

    我见过一些可以与 Android 图库同步照片的应用程序 例如 Picasa 并且我想自己创建类似的东西 我将拥有一个包含照片的远程服务器 并且用户将能够访问这些来自图库中的单独相册 如上述应用程序 然而 我不知道如何实现这一点 甚至不知道
  • 如何在 Nuxt3 中使用 @nuxtjs/axios 模块?

    我有这段代码可以从中获取API数据https fakestoreapi com products https fakestoreapi com products
  • 单击行后插入动态创建组件

    我正在研究解决方案 我想在单击行后附加动态创建的组件 我的表由带有操作按钮的行组成 单击该按钮我将调用角度函数并在该行之后加载组件 这是表代码 div class row div class col div div
  • 如何动态添加tinymce 4.x到textarea?

    我在初始化后动态地将tinymce添加到textarea时遇到了一个小问题 tinymce init selector textarea theme modern height 100 plugins advlist autolink im
  • SimpleCov 计算用户模型的 0% 覆盖率

    我决定尝试使用简单的科夫 https github com colszowka simplecovgem 我认为这是一个很酷的工具 但我有一个问题 我有一个模型User 我有user spec rb其中包含测试用例 但 simplecov
  • Html.DropDownListFor 设置选定值

    我创建一个 Html DropDownListFor 并从数据库中填充它 如何将选定的值设置为下拉列表 My View Html DropDownListFor m gt m Forms new SelectList Model Forms
  • 相对布局权重

    在布局资源 XML 中 我有 3 个relativelayout 它们位于主relativelayout 内 视图将垂直显示 这3个RelativeLayout 被设置为彼此相邻 我希望它们填充整个屏幕 无论屏幕尺寸是多少 我的布局视图
  • 堆的算法在列表列表中的实现

    我正在使用堆算法创建一个包含所述列表的每个排列的列表列表 每个排列将是其自己的列表 当我在算法中打印它时它可以正常工作 但是当我尝试将它添加到我的列表列表中并且它们都是相同的数组 4 1 2 3 时它不能正常工作 我注释掉了我测试过的打印内