有人知道如果数组中的所有元素都有相同的值,我将如何计算出来吗?
我一直试图解决它多年但却无法解决它。例如,测试一个包含5个元素的数组,看它是否有4个相同的值。
谢谢
答案 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)
一步一步:
循环所有数组元素并计算它们没有的次数 匹配第一个元素。
在所有元素都不匹配的情况下,获取第二个元素并重复 测试
答案 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
构建完该地图后,很容易发现你的数组是否符合该标准。
如果您假设在恒定时间内添加到地图,则总体复杂度为2n(迭代数组并迭代地图)。
答案 4 :(得分:1)
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()