java - 为什么 BinaryGap 对于 Trailing_zeroes 不正确(n = 6 和 n = 328)

标签 java

我在整数的二进制表示中找到最长的零序列,但在 app.codility.com 上结果不正确,其中 n = 6 和 n =328

/image/vNCez.jpg

公共(public) int 解决方案(int N){

    Integer result = 1;
    StringBuilder modNumber = new StringBuilder();
    while (result > 0) {
        result = n / 2;
        modNumber.append(n % 2 + "");
        n = result;
    }

    int length = modNumber.length();
    String modString = modNumber.toString();
    Integer binaryGap = 0;
    List<Integer> lstResult = new ArrayList<>();
    Boolean isBinaryGap = false;
    if (modString.charAt(0) == '0') {
        binaryGap = 0;
    } else {
        for (int i = 1; i < length; i++) {
            char c = modString.charAt(i);
            if (c == '0') {
                binaryGap += 1;
                isBinaryGap = true;
            } else {
                isBinaryGap = false;
            }
            if(!isBinaryGap) {
                lstResult.add(binaryGap);
                binaryGap = 0;
            }
        }
    }
    int max=0;
    if(!lstResult.isEmpty()) {
     max = lstResult.stream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();

    }

    return max;
}

最佳答案

问题出在这部分:

    if (modString.charAt(0) == '0') {
        binaryGap = 0;
    } else {

我怀疑你的意图是处理输入为零的情况(那么为什么不立即使用 N 的原始值来处理呢?),但是你会得到很多误报因为形成字符串的技术将这些位按照从最低有效位到最高有效位的顺序排列每个偶数的最低有效位都是 0,因此您报告所有偶数的间隙为 0,但正确结果的唯一偶数是 0。

我确信,利用这些信息,您可以修复代码以产生正确的结果,但如果您选择更简单的方法,问题甚至不会出现。例如,只扫描一次二进制表示,并随时跟踪当前和最大间隙长度怎么样?您已经执行了所需的扫描,但不是直接计算结果,而是经历所有困惑的构建,然后分析字符串表示。代码越简单,出现错误的空间就越小,而且当错误出现时,通常更容易发现。

关于java - 为什么 BinaryGap 对于 Trailing_zeroes 不正确(n = 6 和 n = 328),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050862/

相关文章:

java - 如何修复错误 :processDebugMainManifest DEBUG

Java + MySQL - 语法错误但语句正确

java - GAE 上的 AuthSub nextURL

java - Executor服务线程,一些本地连接对象

java - -128 在 Java 中作为二进制文字

java - wsimport:当 XSD 嵌入 WSDL 时添加绑定(bind)?

java - 通过构造函数的依赖注入(inject)不适用于 EJB bean

java - Apache Derby 驱动程序未自动加载

java - HttpsCookieFilter - IllegalStateException : getOutputStream() has already been called for this response

java - 如何计算查询和文档之间的相似度?