TWOSUM - Two Sum

Xem dạng PDF

Gửi bài giải


Điểm: 1,00
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, JavaScript, Kotlin, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift

Đề bài

Cho một mảng số nguyên ~nums~ và một số nguyên ~target~, hãy trả về chỉ số của hai phần tử trong mảng sao cho tổng của chúng bằng ~target~.

Bạn có thể giả sử rằng mỗi bộ đầu vào luôn có đúng một lời giải, và bạn không được dùng cùng một phần tử hai lần.

Bạn có thể trả về kết quả theo bất kỳ thứ tự nào.

Input

  • Dòng đầu tiên chứa hai số nguyên ~n~ và ~target~ (~2 \leq n \leq 10^5~, ~-2 \times 10^9 \leq target \leq 2 \times 10^9~).
  • Dòng thứ hai chứa ~n~ số nguyên ~nums[0], nums[1], \ldots, nums[n-1]~ (~-10^9 \leq nums[i] \leq 10^9~).

Output

In ra hai số nguyên ~i~ và ~j~ (~i < j~) là chỉ số (0-indexed) của hai phần tử có tổng bằng ~target~.

Ví dụ

Input 1
4 9
2 7 11 15
Output 1
0 1

Giải thích: ~nums[0] + nums[1] = 2 + 7 = 9 = target~, vì vậy đáp án là ~[0, 1]~.

Input 2
3 6
3 2 4
Output 2
1 2

Giải thích: ~nums[1] + nums[2] = 2 + 4 = 6 = target~.

Input 3
2 6
3 3
Output 3
0 1

Giải thích: ~nums[0] + nums[1] = 3 + 3 = 6 = target~.

Ràng buộc

  • ~2 \leq n \leq 10^5~
  • ~-10^9 \leq nums[i] \leq 10^9~
  • ~-2 \times 10^9 \leq target \leq 2 \times 10^9~
  • Luôn tồn tại đúng một lời giải.

Bình luận

Please read the guidelines before commenting.



  • 0
    mducc  đã bình luận lúc 23, Tháng 4, 2026, 14:42

    spoil! ý tưởng:

    Dùng map lưu giá trị → chỉ số đã gặp
    Với mỗi a[i], tính need = target - a[i]
    Nếu need đã có trong map → in ra cặp chỉ số
    Nếu chưa → lưu a[i] vào map
    

    code tham khảo:

        #include <bits/stdc++.h>
    
        using namespace std;
    
        int main() {
            ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    
            int n;
            long long target;
            cin >> n >> target;
            int a[n]; 
            for (int i = 0; i < n; ++i) cin >> a[i];
            map< long long, int> m;
            for (int i = 0; i < n; ++i) {
                long long need = target - a[i];
                if (m.count(need)) {
                    cout << m[need] << " " << i << endl;
                    return 0;
                }
                m[a[i]] = i;
            }
        }
    

  • -5
    quanghientruong14  đã bình luận lúc 10, Tháng 4, 2026, 11:55

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -2
      phat251013  đã bình luận lúc 10, Tháng 4, 2026, 11:56

      sai chính tả kìa sĩ quá


    • -5
      phuthien123  đã bình luận lúc 10, Tháng 4, 2026, 11:56

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -6
    heo2912013  đã bình luận lúc 27, Tháng 3, 2026, 13:28 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -7
      phuthien123  đã bình luận lúc 10, Tháng 4, 2026, 11:46

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


      • -4
        phat251013  đã bình luận lúc 10, Tháng 4, 2026, 11:51

        ??