Mô tả bài toán
Cho mảng nums kích thước n. Tìm số cặp (i,j) (ij - i = nums[i] + nums[j].
Ví dụ
n=8, nums={4,2,1,0,1,2,3,3}. Đầu ra: 13.
Thuật toán (Biến đổi + Binary Search)
- Điều kiện
j - i = nums[i] + nums[j]⇔j - nums[j] = i + nums[i]. - Tạo mảng
vals[i] = i+1 - nums[i](chỉ số 1-based). Sắp xếpvals. - Với mỗi
i, tínhk = nums[i] + i + 1. Sốjthỏa mãn bằngupper_bound(vals, k) - lower_bound(vals, k). - Tổng cộng là kết quả.
Đoạn mã C++
#include <bits/stdc++.h>
using namespace std;
int solve(int n, vector<int> nums) {
vector<int> vals(n);
for(int i=0;i
Đầu vào / Đầu ra
Input: 8, {4,2,1,0,1,2,3,3}
Output: 13