题目链接:https://leetcode-cn.com/problems/minimum-absolute-sum-difference/
class Solution {
public:
int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) {
constexpr int mod = 1e9 + 7;
vector<int> temp = nums1;
sort(temp.begin(), temp.end());
int maxdid = -1;
int len = nums1.size();
int ans = 0;
for(int i = 0, dis; i < len; ++i){
dis = abs(nums1[i]-nums2[i]);
auto it = lower_bound(temp.begin(), temp.end(), nums2[i]);
if(it == temp.end()){
maxdid = max(maxdid, dis - nums2[i] + *(it - 1));
}
else{
if(it != temp.begin() && (nums2[i] - *(it - 1) < *it - nums2[i])){
maxdid = max(maxdid, dis - nums2[i] + *(it - 1));
}
maxdid= max(maxdid, dis - *it + nums2[i]);
}
ans += dis;
ans %= mod;
}
if(-1 != maxdid){
ans = (ans < maxdid ? ans - maxdid + mod : ans - maxdid);
}
return ans;
}
};