class Solution {
public:
int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) {
int sum = 0;
vector<int> stuVector = nums1;
sort(stuVector.begin(), stuVector.end());
int baseDiff = 0;
for (int i = 0; i < nums1.size(); i++) {
sum += abs(nums1[i] - nums2[i]);
sum %= 1000000007;
int offset = lower_bound(stuVector.begin(), stuVector.end(), nums2[i]) - stuVector.begin();
int newDiff = abs(nums1[i] - nums2[i]);
if (offset < stuVector.size()) {
baseDiff = max(baseDiff, newDiff - abs(stuVector[offset] - nums2[i]));
}
if (offset > 0) {
baseDiff = max(baseDiff, newDiff - abs(stuVector[offset - 1] - nums2[i]));
}
}
return (sum + 1000000007 - baseDiff) % 1000000007;
}
};