题目描述:
给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两个数组的大小都为 n ,同时给你一个整数 diff ,统计满足以下条件的 数对 (i, j) :
0 <= i < j <= n - 1 且
nums1[i] - nums1[j] <= nums2[i] - nums2[j] + diff.
请你返回满足条件的 数对数目 。
Level | AC rate |
Hard | 39.42% |
题目解析:
明天解析和总结~!
class Solution {
private:
long long res;
int dif;
public:
void process(vector<int>& nums,int l,int r){
if(l>=r)return;
int mid = l+((r-l)>>1);
process(nums,l,mid);
process(nums,mid+1,r);
merge(nums,l,mid,r);
}
void merge(vector<int>& nums , int l , int mid , int r){
int idxl = l;
int idxr = mid+1;
while(idxl<=mid&&idxr<=r){
res += nums[idxl]-nums[idxr]<=dif?(r-idxr+1):0;
if(nums[idxl]-nums[idxr]<=dif)idxl++;
else idxr++;
}
sort(nums.begin() + l, nums.begin() + r + 1);
}
long long numberOfPairs(vector<int>& nums1, vector<int>& nums2, int diff) {
res = 0;
dif = diff;
for(int i = 0 ; i <nums1.size() ; i++){
nums1[i] -= nums2[i];
}
process(nums1,0,nums1.size()-1);
return res;
}
};
执行用时:300 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:73.8 MB, 在所有 C++ 提交中击败了100.00%的用户