Java 为什么赢了';Eclipse什么时候执行我的代码?
为技术评估做准备,解决问题。无论出于何种原因,我的代码在Eclipse中编译并运行得很好,但在通过Codibility运行时就不行了。这两个“IDE”都应该在Java8环境中执行。以下是错误: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(字符串参数[]){ 溶
示例测试: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。