尋找三個有序陣列的共同最小元素

2021-06-18 04:47:20 字數 756 閱讀 5802

題目:

有3個陣列x、y與z,各有x、y與z個元素,而且三者都已經從小到大依序排 列。編寫乙個程式,找出值最小的共同元素(也就是同時在3個陣列中出現,並且值最小的元素);但若沒有共同元素,請顯示合適的資訊。

解法:

對於這個題目,最容易想到的方法即依次掃瞄陣列x和陣列y,每當x[i] == y[i]時,則在陣列z中搜尋x[i]是否同樣存在於陣列z中。假設陣列x,y,z的長度分別為m,n,p。則該演算法的複雜度為o(min(m,n))  + k*o(lgp).其中k表示陣列x和陣列y中相同元素的個數。那麼這個演算法最壞情況下需要執行o(min(m,n)*lg(p)).當然,我們可以根據m,n,p的大小關係,來決定哪個陣列用於搜尋,哪兩個陣列用於比較求相等的值,使得最終的複雜度最小。

然而這個方法並非最優的解法,事實上,對於這個問題我們至多只需要3*min(m,n,p)次比較即可給出答案。即複雜度為o(min(m,n,p)).具體方法可參見**實現。

/*

*尋找三個有序陣列的最小共同元素

*@return true 找到共同元素

* false 未找到共同元素

*/bool searchmincommon(int *x, int *y, int *z, int m, int n, int p, int& common)

//else

}//while

}//searchmincommon

尋找有序陣列的反轉陣列中最小的元素

尋找有序陣列的反轉陣列中最小的元素 1.利用二分查詢法查詢。設定兩個指標,分別指向陣列的第乙個p1和最後乙個元素p2。2.得到陣列中間位置的元素,將這個元素與第乙個元素比較,如果大於第一元素,證明這個最小的數字在這個中間元素的後面,此時將p1指向中間元素的下乙個位置 如果中間元素小於第乙個元素,那麼...

尋找2個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

有序陣列尋找中位數以及尋找K大元素

問題描述 兩個排序的陣列a和b分別含有m和n個數,找到兩個排序陣列的中位數,要求時間複雜度應為o log m n 轉化成找到兩個陣列的第k大數字進行解決 解題方法 對於乙個長度為n的已排序數列a,若n為奇數,中位數為a n 2 1 若n為偶數,則中位數 a n 2 a n 2 1 2如果我們可以在兩...