Algorithm 如何确定一个整数数组是否有三个相同的整数?
假设我们有一个整数数组numaray[10,23,47,10,19,10]和一个数字(k)10,我们需要找出该数组是否有该数字的三个(在本例中,它有)。检查这个的最好方法是什么?我现在想的方法是对数组进行排序,然后查看数组中是否有3个数字彼此相邻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(
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-passk
作为函数的参数来实现它。也许下次提到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;
}
}
}
}