牛客编程巅峰赛S2第1场 第一题
最小差值
给你一个数组aa,请你求出数组a中任意两个元素间差的绝对值的最小值。(2≤len(a)≤10^3 )
题目理解:
在答题过程中,我陷入了一个自己的死胡同,我的想法是先将数组排序,然后选择冒泡法,分别计算从i=0开始,后面的每个数和其差值,然后每次比较出最小值,并存入临时数组res,最后,排序临时数组,找到最小值。
我的误区就是:将数组a的所有元素排序之后,那么两个元素之间差的绝对值的最小值应该存在于排序后的两个相邻元素之间,而不必去计算所有的元素间差值。
通过的解法如下:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 求最小差值 * @param a int整型vector 数组a * @return int整型 */ int minDifference(vector<int>& a) { // write code here sort(a.begin(),a.end()); vector<int> res; int j=0; for(int i=0;i<a.size()-1;i++) { int ans=a[a.size()-1]-a[i]; for(int j=a.size()-1;j>i;j--) { ans=min(ans,a[j]-a[i]); } res.push_back(ans); } sort(res.begin(),res.end()); return res[0]; } };