Java MAXIMUM 结果,同时保持交替二进制序列硬币翻转问题中的最小变化 示例 3 个硬币示例 6 个硬币

如何解决Java MAXIMUM 结果,同时保持交替二进制序列硬币翻转问题中的最小变化 示例 3 个硬币示例 6 个硬币

我遇到了一个相当普遍的实践问题,即识别二进制序列中的重复项(通常称为“硬币翻转”问题),并且似乎很难解释它,所以请耐心等待。我需要交替二进制序列中的最小变化次数,同时返回这可能导致的最大不同输出

例子:给定一个数组 A = [1,1,1] 有一个最小的变化可以使序列交替,使其 A = [1,0],所以changes = 1. 没有其他方法可以进行1次更改并保持交替序列。

我的问题是我必须找到可以产生的结果数量。因此,给定数组 A = [0,0] 可以产生两个最大结果。 [1,0] 或 [0,1] 都只需要更改 = 2。这可能只是我无法弄清楚正确的逻辑,请参阅下面的代码

public class Solution {
    public int Solution(int[] S) {
        int changes = 0;
        for (int i = 0; i < S.length - 1; i++) { //using length - 1 so my if statement doesn't go out of bounds
            if (S[i] == S[i + 1]) {//How I'm detecting if a duplication has occured (and why length - 1 is necessary)
                changes++;
            }
            if ((S.length >= 4 && i >= 1) && (S[i - 1] == S[i + 2] && S[i] == S[i + 1])) {//This is where I'm having logic issues. It really only addresses the specific instance listed above
                changes++;
            }
        }
        return changes;
    }
}

当找到最小数量的可能更改时,这很有效,但不是结果。这可能只是我无法思考的逻辑问题。我见过其他人问基本相同的问题,但从未试图找到这个神话般的“最大结果”。如果该解决方案存在于其他线程中,请将其发送给我。非常感谢!

*似乎我做了一个糟糕的例子来解释我所说的最大结果的含义,我做了一个更好的例子:

如果数组 A = [1,1] 你应该返回 3,结果是 [1,0] 来改变值 1,3,和 5。这与以 [0,1] 结尾的更改数量相同。您至少需要更改至少 3 个值才能生成交替序列,但只需更改 3 次即可获得第二种结果。

解决方法

对于给定数量的硬币,只有两种可能的交替序列:一种以 0 开头,另一种以 1 开头。
假设一枚硬币只能翻转一次1,那么只能进行两种可能的更改。一个导致第一个序列,另一个导致第二个解决方案。两组变化是互补的,所以两者变化的总和一定是硬币的数量。


示例 3 个硬币

可能的序列:

  • 0,1,0
  • 1,1

0,1开始,我们可以翻转:

  • 第 3 个硬币并获得第一个序列
  • 翻转第一个和第二个硬币以获得第二个序列。

第二个解决方案 - 抛硬币 12 - 是第一个的 互补) - 只抛硬币 3 .第一个有 1 变化,第二个 2 - 总和是 3,硬币的数量。

结论:如果你找到了最小的变化次数,最大值必须是,即翻转所有其他硬币。找零次数就是硬币数量和找零次数的差值。


示例 6 个硬币

可能的序列:

  • 0,1
  • 1,0

1,1(你的例子)开始,我们可以翻转:

  • 硬币数61,0 - 计数1
  • 除编号 6 外的所有:0,1 - 计数 5

总和:1 + 5 = 6,硬币数量


1 否则我们将有无数种可能的移动 - 掷硬币两次(四次、六次、... 次)会产生相同的结果>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?