弄清楚除了一个阵列元素之外的所有元素是否相同

时间:2011-08-04 11:08:59

标签: java

有人知道如果数组中的所有元素都有相同的值,我将如何计算出来吗?

我一直试图解决它多年但却无法解决它。例如,测试一个包含5个元素的数组,看它是否有4个相同的值。

谢谢

7 个答案:

答案 0 :(得分:4)

使用地图。

Map<X, Integer> map = new HashMap<X, Integer>(); // where X is the array type
Integer ct;
for(X item : array){
    ct = map.get(item);
    if(ct == 0) ct = Integer.valueOf(1);
    else ct = Integer.valueOf(ct.intValue()+1);
    map.put(item, ct);
}
// now test if map.values() consists of Integer.valueOf(1) and (optionally)
// another positive integer (thx aioobe)

答案 1 :(得分:2)

一步一步:

  1. 获取第一个元素。
  2. 循环所有数组元素并计算它们没有的次数 匹配第一个元素。

    • 如果所有元素都匹配,那么你的答案(都是相同的)。
    • 如果只有一个元素不匹配,你有答案(一个 是不同的。)
    • 如果某些元素不匹配,你有答案(超过 一个是不同的。)
  3. 在所有元素都不匹配的情况下,获取第二个元素并重复 测试

    • 如果只有一个元素不匹配,则只有一个元素不同(第一个)。
    • 否则,不同元素的数量大于一。

答案 2 :(得分:2)

我想出了这个伎俩: - )

public static boolean allButOneSame(int[] arr) {
    if (arr.length <= 1)
        return arr.length == 1;

    Arrays.sort(arr);

    return  arr[0] != arr[arr.length-1] &&
           (arr[0] == arr[arr.length-2] ||
            arr[1] == arr[arr.length-1]);
}

(依赖于可比较的值,例如整数!)

答案 3 :(得分:1)

我选择的方法是:

遍历所有元素并将它们放在Map(Java中的HashMap)中。

键是元素,值是外观的计数器。

示例:您的数组:A A A A B

图:

A - &gt; 4 B - &gt; 1

构建完该地图后,很容易发现你的数组是否符合该标准。

  1. 地图必须有2个元素(map.size())。
  2. 其中一个元素有计数器1。
  3. 如果您假设在恒定时间内添加到地图,则总体复杂度为2n(迭代数组并迭代地图)。

答案 4 :(得分:1)

  1. 迭代数组,通过比较第一个元素和x + 1个元素,其中x是2,3,4,... array.length()
  2. 如果比较失败,则递增计数器
  3. if((counter == 0)||((counter&gt; 1)&amp;&amp;(counter!= array.length-1)))则不满足条件

    counter = 0表示所有都是相同的元素

    counter = array.length-1表示排序顺序,例如:4,5,5,5,5,5,5

    复杂性 - &gt;时间:O(n),除了计数器

    之外没有额外的空间

答案 5 :(得分:0)

这是另一种方法:

public static <Item> boolean allButOneSame(List<Item> items) {

    // Make sure we have 2 different elements (or 1 element in total)
    if (new HashSet<Item>(items).size() != 2)
        return items.size() == 1;

    // Create a temporary copy
    List<Item> tmp = new ArrayList<Item>(items);

    // Remove all elements equal to the first one.
    tmp.removeAll(Collections.singleton(items.get(0)));

    // Check the number of remaining elements.
    return tmp.size() == 1 || tmp.size() == items.size() - 1;
}

输入List。如果以数组开头,请​​使用Arrays.asList

答案 6 :(得分:0)

您还可以将所有数组元素添加到LinkedHashSet(不重复,保留插入顺序)并查看集合的.size()