Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Count pairs with given sum in C++: นับคู่ที่ผลรวมเท่ากับค่าที่กำหนด

กำหนด array และ sum หาจำนวนคู่ (i,j) ที่ i < j และ arr[i] + arr[j] == sum

ตัวอย่าง: arr = {2,8,1,5,11}, sum = 10 → Output: 2 (คู่: 2+8, 5+5? ไม่มี 5 สองตัว → 2+8, 1+9? ไม่มี → ตัวอย่างอาจมีข้อผิดพลาด)

วิธีแก้ปัญหา

O(n²) - Brute Force

วนลูปทุกคู่

O(n) - Hash Map / Two Pointers (ถ้าเรียงแล้ว)

  1. ใช้ unordered_map นับความถี่
  2. สำหรับแต่ละ x หา sum - x
  3. ระวัง double counting และกรณี x == sum-x

ตัวอย่างโค้ด C++ (Hash Map)

#include <bits/stdc++.h>
using namespace std;

int Pair_Sum(int arr[], int n, int sum) {
    unordered_map freq;
    for(int i=0;i

Input

{2,6,1,7,9,8}, sum=9

Output

2