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

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(使用前将#替换为@)

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

  • Spring Security 自定义身份验证 - AuthenticationProvider 与 UserDetailsS​​ervice

    据我所知 当您想要在 Spring Security 中进行自定义身份验证时 您可以实现自定义AuthenticationProvider或定制UserDetailsService Autowired public void configu
  • 将键与多个值对象关联的有效集合[重复]

    这个问题在这里已经有答案了 有任何有效的集合可以将键与多个值关联起来 例如 new HashMap
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • grails 中的 log4j:如何登录文件?

    我的 grails config groovy 中有这个 log4j 配置 log4j error org codehaus groovy grails web servlet controllers org codehaus groovy
  • Mockito mockStatic 无法解析符号

    我正在使用 Spring Boot 并在单元测试中 我试图模拟Files delete myFile toPath method 为此 我尝试使用Mockito mockStatic 方法 但是当我尝试使用它时 我的 IDE Intelli
  • 对象映射器 - YAMLFactory - 由于缺少 _createContentReference 方法而出现异常

    我正在使用最新的 2 13 0 版本的 jackson 当我尝试解析 YAML 文件时 出现此异常 java lang NoSuchMethodError com fasterxml jackson core io ContentRefer
  • 无法删除临时文件夹(有时)

    当我启动应用程序时 我创建一个临时文件夹 public static File createTempDir String name throws IOException File tempDir File createTempFile na
  • Java:如果数组大小未知,如何初始化?

    我要求用户输入 1 到 100 之间的一些数字并将它们分配到一个数组中 数组大小未初始化 因为它取决于用户输入数字的次数 我应该如何分配数组长度 如果用户输入 5 6 7 8 9 5 个数字 则 int list becomes int l
  • SwingUtilities.invokeLater

    我的问题与SwingUtilities invokeLater 我应该什么时候使用它 每次需要更新 GUI 组件时都必须使用吗 它到底有什么作用 是否有替代方案 因为它听起来不直观并且添加了看似不必要的代码 Do I have to use
  • 在实现接口的类上强制使用单例模式

    我最好用一个例子来解释这个问题 我有一个接口模型可用于访问数据 模型可以有不同的实现 可以以各种格式表示数据 例如 XMl txt 格式等 Model不关心格式 可以说这样的一个实现是myxml模型 现在我想强迫myxml模型以及其他所有实
  • Netty Nio java 中的通信

    我想在 Netty nio 中创建一个具有两个客户端和一个服务器的通信系统 更具体地说 首先 我希望当两个客户端与服务器连接时从服务器发送消息 然后能够在两个客户端之间交换数据 我正在使用本示例提供的代码 https github com
  • Java MYSQL/JDBC 查询从缓存的连接返回过时的数据

    我一直在 Stackoverflow 中寻找答案 但似乎找不到不涉及 Hibernate 或其他数据库包装器的答案 我直接通过 Tomcat 6 Java EE 应用程序中的 MYSQL 5 18 JDBC 驱动程序使用 JDBC 我正在缓
  • 如何根据从 jtextfield 和组合框接收的值将数据行添加到 Jtable

    我有一个JFrame表格有JTextFields JCombobox等等 我能够将这些值接收到变量 现在我想将接收到的数据添加到JTable当用户单击 添加 或类似的操作时在新行中 我创造了JTable使用 net beans 的问题是将这
  • 从侦听器中修改 JFrame [重复]

    这个问题在这里已经有答案了 可能的重复 如何在框架可见后调用 setUndecorated https stackoverflow com questions 875132 how to call setundecorated after
  • 为什么从类构造函数调用的方法应该是最终的? [复制]

    这个问题在这里已经有答案了 我是一名 Java 新手 我试图理解 Oracle 网站教程中的以下行 https docs oracle com javase tutorial java IandI final html https docs
  • 莫基托。验证方法参数是特定类

    我有一个方法 void putObject
  • Java环境变量设置方法

    我已将以下行插入 bash profile export GOOGLE APPLICATION CREDENTIALS Users jun Downloads export PATH PATH GOOGLE APPLICATION CRED
  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • 在edittext android中插入imageview

    我想将 imageview 放在 edittext 中 可能吗 我检查了 evernote 应用程序 它能够将照片放在编辑文本部分 我想让我的应用程序完全相同 我如何才能将从图库中选择的图像视图放入编辑文本中 我首先尝试将 imagevie

随机推荐

  • 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 时它不能正常工作 我注释掉了我测试过的打印内