写在前面

  • 难度:简单
  • ​排序 + 循环迭代计算相邻元素​
  • 清空​​vector​​数组
//1、使用clear ,清空元素,不回收空间
ans.clear();

//2、erase循环删除,不回收空间
for (vector <int>::iterator iter=vecInt.begin();iter!=vecInt.end();)
{
iter=ans.erase(iter);
}

// 3、使用swap,清除元素并回收内存
vector <int>().swap(ans); //清除容器并最小化它的容量,
// vector<vector<int>>().swap(ans);

题目详情

给你个整数数组 arr,其中每个元素都 不相同。

请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。

示例 1

输入:arr = [4,2,1,3]
输出:[[1,2],[2,3],[3,4]]
示例 2

输入:arr = [1,3,6,10,15]
输出:[[1,3]]
示例 3

输入:arr = [3,8,-10,23,19,-4,-14,27]
输出:[[-14,-10],[19,23],[23,27]]

提示:

2 <= arr.length <= 10^5
-10^6 <= arr[i] <= 10^6

ac代码

  • 解题思路
  • 1.数组排序
  • 2.循环计算数组相邻元素差
  • 3.当前差小于历史差,更新最小差,更新结果数组(清空历史数据)
  • 4.当前差等于历史差,插入结果数组
class Solution
{
public:
vector<vector<int>> minimumAbsDifference(vector<int>& arr)
{
vector<vector<int>> ans;
sort(arr.begin(),arr.end());
int mins=999999999;
for(int i=0; i<arr.size()-1; i++)
{
int tmins = arr[i+1]-arr[i];
if(tmins<mins)
{
mins = tmins;
ans.clear();
ans.push_back({arr[i],arr[i+1]});
}
else if(tmins==mins)
ans.push_back({arr[i],arr[i+1]});
}
return ans;
}
};
  • 参考文章
  • leetcode第1200题最小绝对差C++
  • c++中清空vector元素的三种方法