当前位置: 首页 > 知识库问答 >
问题:

数组中元素计数的CodingBat帮助

金子轩
2023-03-14
public boolean haveThree(int[] nums) {
    int count=0;
    for (int i = 0; i < nums.length - 1; i++) {
        if (nums[i] == 3 && nums[i + 1] == 3)
            return false;
        if (nums[i] == 3)
            count++;
    }
    if (nums[nums.length-1] == 3)
        count++;
    return(count==3);
}

以下是测试结果:

Expected Run        
have Three({3, 1, 3, 1, 3}) → true  true OK     
have Three({3, 1, 3, 3}) → false    false   OK      
have Three({3, 4, 3, 3, 4}) → false false   OK      
have Three({1,  3, 1, 3, 1, 2}) → false false   OK      
have Three({1, 3, 1, 3, 1, 3}) → true   true    OK      
have Three({1, 3, 3, 1, 3}) → false false   OK      
have Three({1, 3, 1, 3, 1, 3, 4, 3}) → false    false   OK      
have Three({3, 4, 3, 4, 3, 4, 4}) → true    true    OK       
have Three({3, 3, 3}) → false   false   OK      
have Three({1, 3}) → false  false   OK      
have Three({3}) → false false   OK      
have Three({1}) → false false   OK      
other tests X       

共有1个答案

司寇飞航
2023-03-14

这样做太复杂了,只需计算3的出现次数并执行检查:

int count=0;
for(int i=0; i < nums.length; i++){
    if(nums[i]==3)
        count++;
}
return (count == 3);

或者,您可以让事情变得更快一些,因为如果您处于n-1位置,并且您到目前为止只计算了一个或一个3,您知道这可能会失败,因此:

for(int i=0; count <= 3 && (count == 3 || i < nums.length-2+count); i++){
    if(nums[i]==3)
        count++;
}
return count == 3;

当遇到三个以上3时,这也停止了。但我建议不要这样做,因为它会使代码更加不可读。

int count=0;
for(int i=0; i < nums.length-1; i++){
    if(nums[i] == 3 && nums[i+1] == 3) {
        return false;
    }
}
for(int i=0; i < nums.length; i++){
    if(nums[i]==3)
        count++;
}
return (count == 3);
int count=0;
for(int i=0; i < nums.length; i++){
    if(nums[i] == 3) {
        count++;
        if(i+1 < nums.length && nums[i+1] == 3) {
            return false;
        }
    }
}
return (count == 3);
public boolean haveThree (int[] nums) {
    if(nums == null) {
        return false;
    }
    int count=0;
    for(int i=0; i < nums.length && count <= 3; i++){
        if(nums[i] == 3) {
            count++;
            if(i+1 < nums.length && nums[i+1] == 3) {
                return false;
            }
        }
    }
    return (count == 3);
}
if (nums[nums.length-1] == 3)
    count++;

如果(nums[-1]==3)now-1不作为索引存在,则将导致对的查询,因此IndexoutofboundsException。我在CodeBat上测试了这一点,实际上,这似乎是问题所在。

解决这个问题的一种方法是添加一个“零长度”检查:

public boolean haveThree(int[] nums) {
    if(nums.length <= 0) //hint, although a length is never negative, one better uses "strong conditions"
        return false;
    int count=0;
    for (int i = 0; i < nums.length - 1; i++) {
        if (nums[i] == 3 && nums[i + 1] == 3)
            return false;
        if (nums[i] == 3)
            count++;
    }
    if (nums[nums.length-1] == 3)
        count++;
    return(count==3);
}

但我建议使用上面所述的版本,因为总的来说,这些方法可以减少错误。

 类似资料:
  • 我试图计算2D数组的每个元素,但出于某种原因,我做错了:

  • 假设您希望在排序数组中查找值1的第一个匹配项。对于小数组(二进制搜索之类的东西没有回报),您可以通过简单地计算小于该值的值的数量来实现这一点:结果就是您要查找的索引。 在x86中,您可以使用(加进位)来实现该方法的高效无分支2实现(中的起始指针中的长度和要在中搜索的值): 答案以rax结束。如果你展开它(或者如果你有一个固定的、已知的输入大小),只有cmp;adc指令对被重复,因此每次比较的开销接

  • 问题内容: 我有一个整数数组,我想计算重复出现的元素。首先,我读取数组的大小,并使用从控制台读取的数字对其进行初始化。在数组中,我存储了重复的元素。该数组存储元素连续出现的次数。然后,我尝试搜索重复序列并以特定格式打印它们。但是,它不起作用。 我希望输出看起来像这样: 例如: 如何找到重复的元素及其计数?如何如上所示打印它们? 问题答案: 字典(Java中的HashMap)可以轻松解决此类问题。

  • https://www.geeksforgeeks.org/count-of-larger-elements-on-right-side-of-each-element-in-an-array/#:~: text=朴素的做法:最简单的做法,一边然后打印出来。 我试图以大于左边数字的顺序计算数字,就像上面网站上描述的那样,但网站中的输出是arraylist,但我只想要一个数字,它是arraylist

  • 问题内容: 我编写了以下代码段来计算每个元素的出现次数。有可能以更短的方式实现这一目标吗? 另外,我只想显示出现1次以上的元素。所以我尝试如下修改,这导致了错误。 正确的方法是什么? 问题答案: 对于后一个问题,您必须进行更改 至 对于第一部分,尚不清楚为什么需要第一条管道,然后需要第二条管道。如果目的是将转换为,请使用: 正如Dici所建议的,您还可以将Collectors链接起来,将每个数字与

  • 问题内容: 如果我有一个数组,我想检查数组中有多少个。在JavaScript中不使用循环循环的最优雅的方法是什么? 问题答案: 很简单: