1200: 最小绝对差
思路:排序后,只需考虑相邻元素之差
把 arr 排序后,最小绝对差只能来自相邻元素(不相邻的元素之差更大)。
遍历 arr 中的相邻元素 (x,y),设绝对差为 diff=y−x,当前最小绝对差为 minDiff。
-
如果 diff<minDiff,那么更新 minDiff 为 diff,更新答案为 [[x,y]]。
-
如果 diff=minDiff,那么把 [x,y] 添加到答案中。
vector<vector<int>> ans;
ans={{x,y}};
ans.push_back({x,y}); -
最外层
{}给最外层的vector<vector<int>>初始化; -
内层
{x, y}给里面的第一个vector<int>初始化。
如果想再追加别的对,只要继续 ans.push_back({a, b}); 即可。
class Solution {
public:
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
int n=arr.size(),min_diff=INT_MAX;
ranges::sort(arr);
vector<vector<int>> ans;
for(int i=1;i<n;i++){
int x=arr[i-1],y=arr[i];
int diff=y-x;
if(diff<min_diff){
min_diff=diff;
ans={{x,y}};
}
else if(diff==min_diff) ans.push_back({x,y});
}
return ans;
}
};