我正在寻找一种漂亮的方式在数组中搜索两个最接近的值并返回它们之间的差异。C++:在数组中找到最接近的值
例如: 如果我给这些号码: 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。
对数字进行排序,然后进行通过,检查连续位置的数字。 – 2015-04-03 08:18:12
@LuchianGrigore它确实很优雅,但效率明显,它仍然是'O(n lg n)',就像OP的代码一样。另外,将它们放在'std :: set'中并使用迭代器访问它们已经使其充当“已排序数组”。这就是OP在做什么, – shauryachats 2015-04-03 08:19:16
对数组进行排序,并遍历排序的数组,检查数字对。 – 2015-04-03 08:19:22