如何查找整数数组是否有三个相同的整数?

时间:2015-11-12 04:08:38

标签: algorithm data-structures

假设我们有一个整数数组numArray [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,答案会如何变化。只是找出阵列中是否有任何数字出现三次?

3 个答案:

答案 0 :(得分:1)

对C ++无能为力,但如果你知道k并且不知道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

答案 1 :(得分:0)

除非数组很大,否则您只需将数组转换为字符串并计算您要查找的数字的出现次数(请参阅代码段)。我不确定这对大型阵列有什么影响。



function myFunction() {
    var numArray = [10,23,47,10,19,10];
    var mystring = numArray.toString();

    var count = (mystring.match(/10/g) || []).length;

    document.getElementById("result").innerHTML = count;

}

<button onclick="myFunction()">count 10's</button>

<p id="result"></p>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

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;
                     }  
         }  

}

}

OutPut:Array中的重复数为10:3