问题:
给定数组,求其中两两元素对之差=数组中两元素之差的最小值的,元素对数组。
Example 1: Input: arr = [4,2,1,3] Output: [[1,2],[2,3],[3,4]] Explanation: The minimum absolute difference is 1. List all pairs with difference equal to 1 in ascending order. Example 2: Input: arr = [1,3,6,10,15] Output: [[1,3]] Example 3: Input: arr = [3,8,-10,23,19,-4,-14,27] Output: [[-14,-10],[19,23],[23,27]] Constraints: 2 <= arr.length <= 10^5 -10^6 <= arr[i] <= 10^6
解法:
对原数组排序sort
然后从小到大遍历排序后数组,
同时记录到目前为止两两元素之差mindiff
若新遍历到的两元素之差<mindiff,
那么更新mindiff,把res清空clear,push_back 当前两个元素。
若新遍历到的两元素之差==mindiff,
push_back 当前两个元素。
否则什么都不做,继续遍历下一对。
代码参考:
1 class Solution { 2 public: 3 vector<vector<int>> minimumAbsDifference(vector<int>& arr) { 4 vector<vector<int>> res; 5 sort(arr.begin(), arr.end()); 6 int mindiff=INT_MAX; 7 for(int i=1; i<arr.size(); i++){ 8 int curdiff=arr[i]-arr[i-1]; 9 if(mindiff > curdiff){ 10 res.clear(); 11 res.push_back({arr[i-1], arr[i]}); 12 mindiff=curdiff; 13 }else if(mindiff == curdiff){ 14 res.push_back({arr[i-1], arr[i]}); 15 } 16 } 17 return res; 18 } 19 };