Jianzhi - 配列内に数字が出現する回数 - ハッシュの使用法と詳細

トピックの説明

整数配列内の 2 つの数値を除いて、他のすべての数値は 2 回現れます。一度しか出現しないこれら 2 つの数字を見つけるプログラムを作成してください。
必要な時間計算量は O(n)、空間計算量は O(1) です。

一連の考え

空間の複雑さにより、暴力 (O(n^2)) はおろか、マップを使用することもできません (O(n))。

1. ポジティブな解決策: グループ XOR。リンクは以下にあります。
大物グループが XOR を行う

次に、要件に関係なく、マッピングのみが行われます。練習しても大丈夫です。

詳細:
1. hashmap.getOrDefault(x, y)
x と y の型は自己決定されます。つまり、keySet() に x が存在する場合は対応する値が取得され、x が存在しない場合は y が取得されます。デフォルトで与えられます。
2. int[] と int が動的に作成される場合 (int[] a = new int[n])、デフォルトではすべての要素が 0 になります。文字列の場合は null の代わりに。シンプルですが、最初は見落とされます。

コード

HashMapのバージョンが正しくありません

class Solution {
    
    
    public static int[] singleNumbers(int[] nums) {
    
    
        int[] res = new int[2];
        HashMap<Integer, Integer> hashmap = new HashMap<>();
        for(int i =0; i<nums.length; i++){
    
    
            hashmap.put(nums[i], hashmap.getOrDefault(nums[i],0)+1);
        }
        for(Map.Entry<Integer, Integer> map : hashmap.entrySet()){
    
    
            if(map.getValue() == 1){
    
    
            	if(res[0] == 0) {
    
    
                	res[0] = map.getKey();
            	}
            	else if(res[1] == 0) {
    
    
                	res[1] = map.getKey();
            	}
            }
        }
        return res;
    }
}

おすすめ

転載: blog.csdn.net/qq_32301683/article/details/108542016