如果有一個陣列包含按升序排列的隨機整數,我如何判斷這個陣列是否包含一個等差數列(長度> 3)和公共差分 x?
示例: 輸入: Array=[1,2,4,5,8,10,17,19,20,23,30,36,40,50] x=10 輸出: True
示例說明:陣列包含[10,20,30,40,50],是一個等差數列(長度=5),公差為10。
謝謝!
我很抱歉我沒有嘗試任何代碼來解決這個問題,因為我還沒有任何線索。
uj5u.com熱心網友回復:
從1開始嘗試:檢查是否存在11、21、31...(可以立即停止)
從 2 開始嘗試:檢查 12、22、32... 的存在(可以立即停止)
從 4 開始嘗試:檢查是否存在 14、24、34...(可以立即停止)
...
從 10 開始嘗試:檢查是否存在 20、30、40...(賓果游戲!)
您可以使用線性搜索,但對于大型陣列,哈希映射會更好。如果您可以在找到長度 > 3 的序列后立即停止,則此程序需要線性時間。
uj5u.com熱心網友回復:
越來越多地掃描串列,對于每個元素 v,檢查元素 v 10 是否存在并在它們之間畫一個鏈接。這種搜索可以作為修改后的合并操作在線性時間內完成。
例如從 1,搜索 11;您可以在 17 點停止;從2,搜索12;您可以在 17 點停止;... ; 從 8 中搜索 18;你可以停在19...
現在你有一個圖,它的連通分量形成算術序列。您可以遍歷陣列以搜索長序列(或最長序列),也可以在線性時間內。
在給定的示例中,唯一的鏈接是 10->-20->-30->-40->-50。
uj5u.com熱心網友回復:
您可以通過使用 2 個回圈來解決您的問題,一個回圈遍歷每個元素,另一個回圈檢查元素是否為currentElement x,如果找到一個回圈,則可以從那里繼續。
由于序列的添加規則長度超過 2 個元素,我在 FREE BASIC 中重新創建了您的問題:
DIM array(13) As Integer = {1, 2, 4, 5, 8, 10, 17, 19, 20, 23, 30, 36, 40, 50}
DIM x as Integer = 10
DIM arithmeticArrayMinLength as Integer = 3
DIM index as Integer = 0
FOR position As Integer = LBound(array) To UBound(array)
FOR position2 As Integer = LBound(array) To UBound(array)
IF (array(position) x = array(position2)) THEN
position = position2
index = index 1
END IF
NEXT
NEXT
IF (index <= arithmeticArrayMinLength) THEN
PRINT false
ELSE
PRINT true
END IF
希望能幫助到你
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520204.html
標籤:数组数学序列
