我正在尋找一種漂亮的方式在數組中搜索兩個最接近的值並返回它們之間的差異。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