兩個類似的求最近的數

2021-06-10 06:54:47 字數 518 閱讀 7845

有n個數的陣列,找出這個陣列中的兩個數,使得這兩個數的和最接近0

這篇文章裡給出了幾種演算法,包括暴力演算法,遍歷每兩個數求出最小值,複雜度為n方

有種比較好的方法,先排序,然後遍歷每乙個正數(或者負數),遍歷到乙個數,用這個數取負,在符號相反的區域進行二分查詢,尋找最接近的那個數。

我的方法是用hash,將正負數分別雜湊到乙個雜湊表中,負數取絕對值。然後遍歷乙個雜湊表的每個元素,到另乙個雜湊表對應位置,向兩端遍歷,找到該數最接近的乙個數。

這種方法省去了排序的複雜度,但是前後遍歷可能會花費一定時間,可以適當優化,比方說前面找到最接近的距離為d那麼下乙個數最遠遍歷到距離為d,因為再遠就沒有意義了,這樣一來可以節省一定的時間。

一道類似的題目: 如何比較兩個陣列得到每個值在另乙個數值中的最接近值

1 兩個陣列都排序,遍歷乙個陣列的每個數,對於這個數到另乙個陣列中進行二分查詢。

2 兩個陣列雜湊到兩個雜湊表中,然後對應位置前後掃瞄。

因此對於距離最近的一維陣列的求法,基本上先要使其有序再根據特點進行查詢。

求兩個節點的最近公共祖先節點

原文 分三種情況 1 搜尋二叉樹,根據搜尋二叉樹的性質,左子樹的所有節點比根節點小,右子樹的所有節點比跟節點大。如果兩個節點都比根節點小,則遞迴左子樹 如果兩個節點都比跟節點大,則遞迴右子樹 否則,兩個節點乙個在左子樹,乙個在右子樹,則當前節點就是最近公共祖先節點。2 二叉樹有指向父節點的指標。問題...

求兩個整型數的平均數

兩數相加除以2 這種寫法是簡單將兩個數相加,然後除以2。include int main 這種 是有弊端的,當x y的值大於2147483674時會發生溢位 32位機器上int佔4個位元組,範圍是 2147483648 2147483674 這種情況下兩個正數求出的平均值就是負數!如下 includ...

求兩個int之間較小的數

主要 於這個帖子 相關的還有這個帖子 要求是不用比較,不用if,不用第三方函式,不用內嵌彙編,不用遞迴,求兩個int之間較小的那個。的方法 include 要求實現的函式 int min int a,int b 測試 int main void 雖然這個方法在溢位上貌似還有點問題,但是這個想法我是想...