給定一個數組,我想查找元素的最大子集,使得子集的最小和最大元素小於或等於K分開。具體來說,我想要的是元素,而不僅僅是大小。如果有多個事件,則可以匹配任何事件。陣列中最大的子集,使得最小和最大的元素分開小於K
例如,在數組[14,15,17,20,23]
中,如果K爲3,則可能的最大子集爲[14,15,17]
。如果將17替換爲16,也是一樣。還應該匹配多個元素,例如[14,14,14,15,16,17,17]
。數組不一定是排序的,但它可能是排序它的一個很好的起點。元素不一定是整數,子集不一定在原始數組中連續 - 我只是想要發生最大的可能子集。
爲了更清楚地說明理想的結果,一個簡單的方法是首先對數組進行排序,迭代排序數組的每個元素,然後創建一個新數組,包含當前元素,該元素被擴展後包含每個元素當前元素< = K大於它。 (即在上面的第一個例子中,如果當前元素爲20,那麼該數組將被擴展爲[20,23],然後停止,因爲數組的末尾已到達;如果當前元素爲15,則數組將被擴展到[15,17],然後停止,因爲20比15大3以上)。然後這個數組與當前的最大值進行檢查,如果它更大,則將取代當前的最大值。當前的最大值是最大的子集。 (在最大子集是數組的情況下,這種方法的複雜度爲O(N^2)。)
我意識到這種天真的方法,並且這個問題是要求優化的算法。
雖然我可以使用一般算法運行,但Python中的解決方案更可取。
您應該使用自定義[後綴樹](https://hkn.eecs.berkeley.edu/~dyoo/python/suffix_trees/)。 – Kasramvd
值是否始終爲整數? – samgak
@samgak不,他們不一定是整數。 – ChiCubed