【问题标题】:Check if array has at least two elements with specific value检查数组是否至少有两个具有特定值的元素
【发布时间】:2023-04-05 09:23:01
【问题描述】:

假设我有一个包含以下值的数组: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的个数。只做一次(你的逻辑会让你在每个循环中计算一次)。
  • 向后循环并跳过前两个 1 不是更好吗?
  • 位运算符可能有用。
  • 标题中的任务(检查数组中是否至少有两个1)和内容中的任务(全部删除,直到剩下2个)是两个不同的任务。你想解决哪一个?

标签: java arrays loops


【解决方案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。或者,如果您首先对数组进行排序,您可能会发现它更容易。

【讨论】:

    【解决方案2】:
    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 试试这个,如果我没有正确理解你的要求,对不起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 2022-06-25
      • 2022-01-08
      相关资源
      最近更新 更多