首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的代码不返回特定输入"524275“的连续1的”最大“数目?

为什么我的代码不返回特定输入"524275“的连续1的”最大“数目?
EN

Stack Overflow用户
提问于 2017-07-23 16:44:32
回答 1查看 44关注 0票数 1

我在努力解决HackerRank代码10日问题。

简而言之,任务是在一个十进制数的二进制表示中找到连续1的最大数目。在我的代码中,我尝试使用两个变量:counthold。当字符串的当前位置和前一个位置都是1时,count增加1。当I‘’th位置为0时,count的值被赋值给变量hold。在接下来的迭代中,如果count的值超过hold的值,则count的值被分配给hold。这样,连续1的最大值存储在hold中。最后,我打印hold的值。

代码语言:javascript
运行
复制
import java.util.*;
public class Solution {

    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Enter decimal number");
    int n = in.nextInt();
    String binary = Integer.toString(n,2);
    int count=1;
    int hold=0;
    if(binary.equals("0"))
        System.out.println(0);
    else
    {
    for(int i=0;i<binary.length();i++)
    {
        if(i==0){}
        else if(binary.charAt(i-1)=='1' && binary.charAt(i)=='1')
        {
            count++;
        }
        if(count>hold)
           hold=count;
        if(binary.charAt(i)=='0')
        {
            hold=count;
            count=1;
        }

    }
    System.out.println(hold);
    }
  }
}

我的代码不适用于示例输入"524275“,该输入以二进制格式转换为"1111111111111110011”。输出结果是2,这是奇怪的。我的代码是这样写的,以返回连续1的“最大”数目。我哪里出错了?我试着从精神上运行代码,但还没有发现错误。

EN

Stack Overflow用户

回答已采纳

发布于 2017-07-23 17:02:31

在使用for循环处理了第一个15之后,hold实际上将具有15值。然后遇到第一个零,if(binary.charAt(i)=='0') { hold=count; count=1; }会将count重置为1。但是,您会立即找到另一个零,相同的代码if(binary.charAt(i)=='0') { hold=count; count=1; }1存储在hold中,您就会丢失信息15

一个简单的解决方案就是删除该行中的hold=count;行。您已经在上面设置了三行hold。(而且是正确的,因为只有当count大于以前的最佳值时才会这样做。

这个方法相当复杂。如果你想要一个更简单的方法。代码应该很清楚。

代码语言:javascript
运行
复制
int current_consecutive_ones = 0;
int best_consecutive_ones = 0;
for(int i = 0; i < binary.length(); i++)
{
    if (binary.charAt(i) == '1')
        current_consecutive_ones++;
    else
        current_consecutive_ones = 0;

    if (current_consecutive_ones > best_consecutive_ones)
        best_consecutive_ones = current_consecutive_ones;
}
System.out.println(best_consecutive_ones);
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45267530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档