Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何确定一个整数数组是否有三个相同的整数?_Algorithm_Data Structures - Fatal编程技术网

Algorithm 如何确定一个整数数组是否有三个相同的整数?

Algorithm 如何确定一个整数数组是否有三个相同的整数?,algorithm,data-structures,Algorithm,Data Structures,假设我们有一个整数数组numaray[10,23,47,10,19,10]和一个数字(k)10,我们需要找出该数组是否有该数字的三个(在本例中,它有)。检查这个的最好方法是什么?我现在想的方法是对数组进行排序,然后查看数组中是否有3个数字彼此相邻 numArray = sort(numArray) // O(nlogn) Loop through numArray to check if number ks are adjacent // O(n) 这将使总运行时为O(nlogn+n)=O(

假设我们有一个整数数组numaray[10,23,47,10,19,10]和一个数字(k)10,我们需要找出该数组是否有该数字的三个(在本例中,它有)。检查这个的最好方法是什么?我现在想的方法是对数组进行排序,然后查看数组中是否有3个数字彼此相邻

numArray = sort(numArray) // O(nlogn)
Loop through numArray to check if number ks are adjacent  // O(n)
这将使总运行时为O(nlogn+n)=O(nlogn)。有没有更好的方法可以在更短的时间内做到这一点


更新:如果没有给出数字k,答案会有什么变化。只需查找数组中是否有任何数字出现三次?

除非数组很大,否则您只需将数组转换为字符串并计算所查找数字的出现次数(请参见代码段)。我不确定这在大型阵列中是如何实现的

函数myFunction(){
var numArray=[10,23,47,10,19,10];
var mystring=numArray.toString();
变量计数=(mystring.match(/10/g)| |[]).length;
document.getElementById(“结果”).innerHTML=count;
}
计数10

<代码> 对C++没有帮助,但如果你知道代码代码>,不知道<代码> k>代码,这里有一个Python解决方案。第一个是
O(n)
时间复杂度和
O(1)
存储使用。第二个是
O(n)

方式1:只需计算
k
的发生次数,并检查count==3或任何
n

方式2:创建值的字典/映射,以显示该值的出现。在迭代值时,增加映射中该值的计数。然后循环映射中的值,检查该值是否为3,或者是否为任何
n

def array_contains_n_k(arr, n, k):
    count = 0
    for val in arr:
        if val == k:
            count+=1

    return count == n

def array_contains_n_number(nums, n): 
    counts = dict()
    for val in nums:
        key = str(val)
        if key in counts:
            counts[key] += 1
        else:
            counts[key] = 1

    for k,v in counts.items():
        if v == n:
            return True

nums = [10, 23, 47, 10, 19, 10]
k = 10
n = 3

print array_contains_n_k(nums, n, k) # True
print array_contains_n_number(nums, n) # True
import java.util.HashMap;
公共类重复数数组{
/**
*@param args
*/
公共静态void main(字符串[]args){
HashMap hm=新的HashMap();
int arrynum[]={10,23,47,10,19,10};
for(int i=0;i=3)
{
System.out.println(“数组中的重复数为“+i+”:“+hm.get(i));
打破
}  
}  
}
}

输出:数组中的repeatednum是10:3

保留一个计数器,并在数组中迭代,在找到10时递增计数器。O(n)时间O(1)空间你有没有一种编程语言,你想用它来实现,或者这只是一个算法问题?基本上是算法问题。如果有帮助的话,我正在尝试用C++-UPDATE-pass
k
作为函数的参数来实现它。也许下次提到C++需要一个合适的语言例子。不要在手腕上打你,但是进入这个:<代码> C++发现数组< /代码>中的出现,作为谷歌搜索项将给你带来很多例子……就像…在空间方面,开销过大,且很强。。
import java.util.HashMap;

public class RepeatedNumInArray {

/**
 * @param args
 */
public static void main(String[] args) {

      HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>(); 

           int arrynum[] = {10,23,47,10,19,10};

           for (int i = 0; i < arrynum.length; i++) {
            // put all integer values in Map
            // make use of Map key-value pair
               if(hm.containsKey(arrynum[i])){
                   hm.put(arrynum[i], hm.get(arrynum[i])+1);   
               }
            //if value occur only one time
               else
               {
                   hm.put(arrynum[i], 1);
               }
        }


        for(int i:arrynum)
        {  
          //check if value occurs 3 times
          if (hm.get(i) >=3)
                     {
  System.out.println("Repeated num in Array is " +i+ " : "+hm.get(i));
                 break;
                     }  
         }  

}

}