我正在寻找一种漂亮的方式来在数组中搜索两个最接近的值并返回它们之间的差异。
例如: 如果我给这些数字: 10,1,43,59,78,46,63,12
他必须找到10 / 12,43 / 45并返回2。
我发现很多方法你找到一个给定数字的最接近的值,但从来没有找到一种方法来找到没有给定数字的两个最接近的数字。
我尝试使用更有效但但每次都没有对我有用,有人有想法吗?
我的代码暂时是:
set<int> numbers;
//imagine i set many values in numbers here
int diff = 100000000;
for (set<int>::iterator it=numbers.begin(); it!=numbers.end();)
{
int first = *it;
int second = *(++it);
diff = min(abs(second-first), diff_min);
}
cout << diff << endl;
THX。
答案 0 :(得分:0)
可以使用哈希表,但会增加空间复杂性。
答案 1 :(得分:0)
如果您对其可扩展性感兴趣,可以使用O(N)方法(或者更接近于任何方式)...它基于 binning 数字和然后只考虑关闭箱子来搜索最短距离。
如果有兴趣,我会在后面详细说明。