簡體   English   中英

在數組中查找對數

[英]Find pair number in an Array

有一個包含幾個數字的數組。 其中找出在Java中的對數(在該數組中包含2次)。 假設此數組2中的{2,5,7,8,2,3,5,6,5}包含2次,因此它是對數。

我嘗試過這種方式:

HashMap<Integer, Integer> hmap = new HashMap<>();
  for (int i = 0; i < arr.length; i++)
    {
        Integer c = hmap.get(arr[i]);
        if (hmap.get(arr[i]) == null)
               hmap.put(arr[i], 1);
        else
          hmap.put(arr[i], ++c);
    }

你可以使用流

List<Integer> collect = Stream.of(2, 5, 7, 8, 2, 3, 5, 6, 5)
            .collect(Collectors.groupingBy(e -> e)).entrySet().stream()
            .filter(e -> e.getValue().size() == 2).map(Map.Entry::getKey)

使用原始類型的程序

num [j] ='0'; //這只是一個占位符

  int []num = {2,5,7,8,2,3,5,6};
        int counter = 0;
        for(int i=0;i<num.length-1;i++){
            for(int j=i+1;j<num.length && num[i]!=0;j++){
                if(num[i] == num[j]){
                    counter++;
                    num[j]= 0;
                }
            }
            if(counter==1)
                 System.out.println("pair found for: "+num[i]);
            counter = 0;
        }

我可以想到兩種方式。 首先,您可以使用一個映射,在這種方法中,您將把每個元素放入數組中,然后將其放入映射中,以便每次進行迭代時都可以檢查是否已將該值插入到映射中。

第二種方法類似於排序,但是您可以使用以下所有元素檢查數組中的每個元素,一旦找到匹配項,您將立即返回並退出。 該方法將比我認為的map方法慢,但比先排序然后查找相鄰值快。

不發布實際的代碼,將其放入Map中並查找數量。 但是您需要注意檢查2s的計數。 它不僅是2,所有帶有4,6,8等的計數也會導致成對(我認為到目前為止,該問題的所有答案和評論都缺少這一點)。

從您發布的內容來看,您的代碼是好的。 您有一個映射,其中包含找到的每個值的計數。

現在,您只需要打印所需的內容,

for(Integer i : hmap.keySet()){
    Integer cnt = hmap.get(i);
    if(cnt > 1)} //or == 2
        System.out.println(i + " -> " + cnt);
    }
}

而且每對輸入都有一個不錯的輸入(如果有更多輸入,則有計數),只需更新輸出即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM