[leetcode 여행] 배열. - 532. 배열 의 K - diff 수 맞습니다.

정수 배열 과 정수 하 나 를 지정 합 니 다. k, 배열 에서 다른 것 을 찾 아야 합 니 다. k - diff 수 맞습니다.여기 k-diff 수 대 는 하나의 정수 대 (i, j) 로 정의 되 는데 그 중에서 i 화해시키다 j 모두 배열 의 숫자 이 고 두 수의 차 이 는 절대적 인 값 이다. k.
예시 1:
  : [3, 1, 4, 1, 5], k = 2
  : 2
  :        2-diff   , (1, 3)   (3, 5)。
        1,               。

예시 2:
  :[1, 2, 3, 4, 5], k = 1
  : 4
  :        1-diff   , (1, 2), (2, 3), (3, 4)   (4, 5)。

예시 3:
  : [1, 3, 1, 5, 4], k = 0
  : 1
  :         0-diff   ,(1, 1)。

주의:
4. 567917. 수 대 (i, j) 와 수 대 (j, i) 같은 숫자 로 계산 된다
4. 567917. 배열 의 길 이 는 10, 000 을 초과 하지 않 는 다
4. 567917. 모든 입력 의 정수 범 위 는? [-1e7, 1e7]。
해답:
/**
 *    :  map  
 * @param nums
 * @param k
 * @return
 */
public static int findPairs1(int[] nums, int k) {
    if (nums == null || nums.length < 0 || k < 0)
        return 0;
    Map map = new HashMap<>();
    for (int i : nums){
        //         map ,     
        map.put(i,map.getOrDefault(i,0) + 1);
    }
    int count = 0;
    for (Map.Entry entry: map.entrySet()){
        // k = 0 ,               
        if (k == 0){
            if (entry.getValue() >= 2){
                count++;
            }
        }else{
            //  map          num1 - num2 = k
            if (map.containsKey(entry.getKey() + k)){
                count++;
            }
        }
    }
    return count;
}

/**
 *    :    Set  ,          ,          
 * @param nums
 * @param k
 * @return
 */
public static int findPairs2(int[] nums, int k) {
    //        
    Set numbers = new HashSet<>();
    //    k-diff  
    Set diff = new HashSet<>();
    for (int num : nums){
        //        :      
        if (numbers.contains(num + k))
            diff.add(num);
        if (numbers.contains(num - k))
            diff.add(num);
        numbers.add(num);
    }
    return diff.size();
}

 
 
 

좋은 웹페이지 즐겨찾기