📌  相关文章
📜  求 X + K 也存在于数组中的元素数 X

📅  最后修改于: 2021-10-27 16:57:35             🧑  作者: Mango

给定一个数组 a[] 和一个整数 k ,找到这个数组中元素 x 的数量,使得 x 和 k 的总和也出现在数组中。
例子:

Input:  { 3, 6, 2, 8, 7, 6, 5, 9 } and k = 2
Output: 5 
Explanation:
Elements {3, 6, 7, 6, 5} in this array have x + 2 value that is
{5, 8, 9, 8, 7} present in this array.

Input:  { 1, 2, 3, 4, 5} and k = 1
Output: 4
Explanation:
Elements {1, 2, 3, 4} in this array have x + 2 value that is
{2, 3, 4, 5} present in this array.

该问题类似于在数组中查找具有给定总和的对的计数。
天真的方法:
解决上面提到的问题我们可以使用蛮力方法并找到结果。迭代两个循环,检查数组中的每个 x 是否存在 x+2 。如果存在,则增加计数并最终返回计数。
有效的方法:
解决问题的有效方法是使用 HashMap,map 中的键将作为该数组中的唯一元素,相应的值将告诉我们该元素出现的频率。
遍历此映射并针对此映射中的每个键 x 查找键 x + k 是否存在于映射中,如果存在,则将此频率添加到答案中,即对于此元素 x,我们在此数组中有 x+k。最后,返回答案。
下面是上述方法的实现:

C++
// C++ implementation of find number
// of elements x in this array
// such x+k also present in this array.
#include 
using namespace std;
 
// Function to return the
// count of element x such that
// x+k also lies in this array
int count_element(int N, int K, int* arr)
{
    // Key in map will store elements
    // and value will store the
    // frequency of the elements
    map mp;
 
    for (int i = 0; i < N; ++i)
        mp[arr[i]]++;
 
    int answer = 0;
 
    for (auto i : mp) {
 
        // Find if i.first + K is
        // present in this map or not
        if (mp.find(i.first + K) != mp.end())
 
            // If we find i.first or key + K in this map
            // then we have to increase in answer
            // the frequency of this element
            answer += i.second;
    }
 
    return answer;
}
 
// Driver code
int main()
{
    // array initialisation
    int arr[] = { 3, 6, 2, 8, 7, 6, 5, 9 };
 
    // size of array
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // initialise k
    int K = 2;
 
    cout << count_element(N, K, arr);
 
    return 0;
}


Java
// Java implementation of find number
// of elements x in this array
// such x+k also present in this array.
import java.util.*;
 
class GFG{
  
// Function to return the
// count of element x such that
// x+k also lies in this array
static int count_element(int N, int K, int[] arr)
{
    // Key in map will store elements
    // and value will store the
    // frequency of the elements
    HashMap mp = new HashMap();
  
    for (int i = 0; i < N; ++i)
        if(mp.containsKey(arr[i])){
            mp.put(arr[i], mp.get(arr[i])+1);
        }else{
            mp.put(arr[i], 1);
    }
  
    int answer = 0;
  
    for (Map.Entry i : mp.entrySet()) {
  
        // Find if i.first + K is
        // present in this map or not
        if (mp.containsKey(i.getKey() + K) )
  
            // If we find i.first or key + K in this map
            // then we have to increase in answer
            // the frequency of this element
            answer += i.getValue();
    }
  
    return answer;
}
  
// Driver code
public static void main(String[] args)
{
    // array initialisation
    int arr[] = { 3, 6, 2, 8, 7, 6, 5, 9 };
  
    // size of array
    int N = arr.length;
  
    // initialise k
    int K = 2;
  
    System.out.print(count_element(N, K, arr));
}
}
 
// This code is contributed by Princi Singh


Python3
# Python3 implementation of find number
# of elements x in this array
# such x+k also present in this array.
 
# Function to return the
# count of element x such that
# x+k also lies in this array
def count_element(N, K, arr):
     
    # Key in map will store elements
    # and value will store the
    # frequency of the elements
    mp = dict()
 
    for i in range(N):
        mp[arr[i]] = mp.get(arr[i], 0) + 1
 
    answer = 0
 
    for i in mp:
 
        # Find if i.first + K is
        # present in this map or not
        if i + K in mp:
 
            # If we find i.first or key + K in this map
            # then we have to increase in answer
            # the frequency of this element
            answer += mp[i]
 
    return answer
 
# Driver code
if __name__ == '__main__':
    # array initialisation
    arr=[3, 6, 2, 8, 7, 6, 5, 9]
 
    # size of array
    N = len(arr)
 
    # initialise k
    K = 2
 
    print(count_element(N, K, arr))
     
# This code is contributed by mohit kumar 29


C#
// C# implementation of find number
// of elements x in this array
// such x+k also present in this array.
using System;
using System.Collections.Generic;
 
public class GFG{
   
// Function to return the
// count of element x such that
// x+k also lies in this array
static int count_element(int N, int K, int[] arr)
{
    // Key in map will store elements
    // and value will store the
    // frequency of the elements
    Dictionary mp = new Dictionary();
   
    for (int i = 0; i < N; ++i)
        if(mp.ContainsKey(arr[i])){
            mp[arr[i]] = mp[arr[i]]+1;
        }else{
            mp.Add(arr[i], 1);
    }
   
    int answer = 0;
   
    foreach (KeyValuePair i in mp) {
   
        // Find if i.first + K is
        // present in this map or not
        if (mp.ContainsKey(i.Key + K) )
   
            // If we find i.first or key + K in this map
            // then we have to increase in answer
            // the frequency of this element
            answer += i.Value;
    }
   
    return answer;
}
   
// Driver code
public static void Main(String[] args)
{
    // array initialisation
    int []arr = { 3, 6, 2, 8, 7, 6, 5, 9 };
   
    // size of array
    int N = arr.Length;
   
    // initialise k
    int K = 2;
   
    Console.Write(count_element(N, K, arr));
}
}
// This code contributed by Princi Singh


Javascript


输出:
5

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程