检查数组是否至少有两个特定值的元素

3
假设我有一个如下数值的数组:0,1,0,0,0,1,0,1,1 我正在循环遍历该数组并将1替换为0。但是,如果我的数组中还剩下2个1,我希望退出这个循环。目前我没有太多的代码,但以下是我正在努力完成的草稿。
if(//There are more than 2 1s ){
        return true; //carry on looping
    }

    return false; //break the loop

我不知道如何区分0和1,所以对于如何使其正常工作感到困惑。欢迎提供任何想法。


1
使用计数器临时变量。 - Luiggi Mendoza
首先计算1的数量。只需执行一次此操作(您的逻辑可能会导致每个循环都进行一次计数)。 - Paul Hicks
4
倒序循环并跳过前两个1不是更好吗? - Keppil
位运算符可能会很有用。 - aa333
标题中的任务(检查数组中是否至少有两个1)和内容中的任务(删除所有1,直到只剩下2个)是两个不同的任务。您想要解决哪一个? - RealSkeptic
2个回答

1

一个可能的解决方案是先编写一个实用方法来测试数组中特定位置上的给定值是否与其后续位置上的每个值都不同,例如:

private static boolean testUnique(int[] arr, int i) {
    int t = arr[i];
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[j] == t) {
            return false;
        }
    }
    return true;
}

然后你可以从左到右迭代数组,检查每个值是否唯一,如下所示:
public static boolean hasDuplicate(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        if (!testUnique(arr, i)) {
            return false;
        }
    }
    return true;
}

使用你的数组,
public static void main(String[] args) {
    int[] arr = { 0, 1, 0, 0, 0, 1, 0, 1, 1 };
    System.out.println(hasDuplicate(arr));
}

那是false。或者,如果您先对数组进行排序,可能会更容易些。

1
public int[] testDuplicatesofOne(int[] arr)
{
    int count=0;
    for(int i=0;i<arr.length-1;i++)
    {
        count+=(arr[i]>0?1:0);
    }

    if(count>=2)
    {
    for(int j=0;j<arr.length-1;j++)
    {
        if(count>2) 
        {
            if(arr[j]==1)
            {
                arr[j]=0;
                count--;
            }
        }else
        {
            break;
        }

    }
    }
}

你好Lukasz,尝试这个,如果我没有正确理解您的要求,请原谅。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接