相当于标题所说的内容。我想过使用Sets并将大小与普通数组进行比较但是如果我有2个重复元素,则Set大小与一个元素有2个副本相同。
非常感谢任何有关如何处理此问题的帮助!
答案 0 :(得分:0)
我认为最快的方法是蛮力方法,即遍历阵列并计算你想要计算的数量。您可以通过一个班轮调用的每个其他实现也必须遍历数组,使用HashMap添加开头来填充和维护映射,如果找到了搜索的内容,则无法停止迭代。
使用以下私人方法,您也可以通过主代码的单行调用来使用它:
main()
{
String[] myArray = new String[] {
"Hello",
"Hello",
"Hello",
null,
null,
};
boolean gotIt = hasAtLeastThreeOccurences( myArray, "Hello");
myLog.debug( "gotIt: " + gotIt );
}
private <T> boolean hasAtLeastThreeOccurences( T[] aArray, T aValue)
{
int count = 0;
boolean isNull = (aValue == null);
for ( T t : aArray )
{
if ( isNull )
{
if ( t == null )
{
count++;
}
}
else
{
if ( aValue.equals( t ) )
{
count++;
}
}
if ( count >= 3 )
{
return true;
}
}
return false;
}
答案 1 :(得分:0)
假设你的数组是一个字符串数组(仅作为一个例子),你可以调用这个方法,如果它返回null
那么没有3个元素或更多具有相同的值,否则它将返回第一个元素发现3次或更多
public String getRedundantItem(String... myArray) {
// Convert the array to List
ArrayList<String> myList = new ArrayList<String>(Arrays.asList(myArray));
// Look for the element which frequency is three or more
for (String item : myList) {
if (Collections.frequency(myList, item) > 2) {
return item;
}
}
// No element more than 2 times
return null;
}
测试示例:
public void test(){
String[] someData = {"stack","over", "flow", "stack", "stack"};
String[] otherData = {"stack","over", "flow", "stack", "flow"};
System.out.println(getRedundantItem(someData)); // prints stack
System.out.println(getRedundantItem(otherData)); // prints null
}
答案 2 :(得分:0)
如果数组有三个具有相同值的元素
我们保留:element =&gt;发生的次数。难以做得更少或更快
AdView
答案 3 :(得分:-1)
这是使用int变量的示例,但基本思想是将要与数组的其他值进行比较的值设置为第一个变量。然后当我们找到等于键的元素时,我们增加一个临时计数变量。如果临时计数变量大于实数计数变量,则实数计数变量将替换为临时计数变量。一旦找到不相等的元素,就会将新的键值设置为正在迭代的当前元素,并重置临时计数变量。但是,这可能会被修改,例如,一旦临时计数达到3,您就可以突破循环。我不确定这是不是你想要的,但享受。
int key = arr[0];
int tempCount = 0;
int realCount = 0;
for(int i = 1; i < arr.length; i++){
if(arr[i] == key){
tempCount++;
}
else{
key = arr[i];
tempCount = 0;
}
if(tempCount > realCount){
realCount = tempCount;
}
}
if(realCount >= 3){
boolean hasThreeOfTheSame = true;
//do stuff you want to do
}
编辑:我现在意识到OP需要一种方法来查找数组中是否有3个相同的元素,尽管顺序。我误读了这个,所以我的解决方案发现一个数组是否连续有3个或更多连续元素(例如:[1,1,1,2,3]或[1,2,2,2,3])。我只是为了保持这种状态,因为它可以帮助那些人。