Java 为什么赢了';Eclipse什么时候执行我的代码?

Java 为什么赢了';Eclipse什么时候执行我的代码?,java,eclipse,collections,Java,Eclipse,Collections,为技术评估做准备,解决问题。无论出于何种原因,我的代码在Eclipse中编译并运行得很好,但在通过Codibility运行时就不行了。这两个“IDE”都应该在Java8环境中执行。以下是错误: 示例测试:1041 回答错误(得到0,预期为5) 示例测试:15 好啊 import java.util.TreeSet; 导入java.util.regex.Matcher; 导入java.util.regex.Pattern; 公共类Gapper{ 公共静态void main(字符串参数[]){ 溶

为技术评估做准备,解决问题。无论出于何种原因,我的代码在Eclipse中编译并运行得很好,但在通过Codibility运行时就不行了。这两个“IDE”都应该在Java8环境中执行。以下是错误:

示例测试:1041
回答错误(得到0,预期为5)
示例测试:15
好啊
import java.util.TreeSet;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类Gapper{
公共静态void main(字符串参数[]){
溶液溶胶=新溶液(1041);
sol.solution(sol.getId());
}
}
类解决方案{
私有整数计数=0;
私有int-id;
私有字符串二进制;
私有静态最终字符串Regex=“(1{1})([0]{1,})(1{1})”;
私有模式;
私人火柴垫;
私家树;
公共无效集合id(内部id){
this.id=id;
}
公共int getId(){
返回此.id;
}
公共int解决方案(int N){
tree=新树集();
this.binary=Integer.toBinaryString(id);
对于(inti=0;i
这不是编译错误-codality成功编译并运行了您的代码,它只是提醒您代码生成了错误的答案。在这种情况下,对于1041的输入,正确答案是5,但您的代码给出0

我认为用正则表达式解决这个问题是错误的方法。它迫使你对数字的外观做出假设。计算零可能要简单得多:

public int soltuion(int n) {
    int curr = 0;
    int max = 0;

    while (n > 0) {
        int bit = n & 1;
        n >>= 1;
        if (bit == 1) {
            if (curr > max) {
                max = curr;
            }
            curr = 0;
        } else {
            curr++;
        }
    }

    return max;
}

这是在所有情况下都有效的正确解决方案

public int solution(int N) {

        int curr = 0;
        int max = 0;
        int state = 0;

        while (N > 0) {
            int bit = N & 1;
            switch (state) {
                case 0:
                    if (bit == 1 )
                    state = 1;
                    break;
                case 1:
                    curr = 0;
                    if (bit == 0) {
                        curr++;
                        state = 2;
                    }
                    break;
                case 2:
                    if (bit == 0) {
                        curr++;
                    }
                    else {
                        state = 1;
                        if (curr > max) {
                            max = curr;
                        }
                    }
                    break;
                }
            N >>= 1;
        }
        return max;
    }

这个“synchronizedNavigableSet”方法是什么,或者是一个打字错误是的,是这个代码早期版本的打字错误。注意编辑。此代码不适用于2**n数字,如32(二进制100000)。它以5表示32,而预期为0。@Tarun为什么预期为
0
?这里有一个由五个零组成的序列。根据二进制间隙定义,连续零的序列应该在两端被一包围。因此,对于100000(32)二进制间隙为0,对于1000001二进制间隙为5。