我必須解決一個問題,就像最大的子陣列問題。我必須找到平均值大於k的最大子陣列。我想到了以下技巧。我可以將大小爲n的數組A []轉換爲B [],其中B [i] = A [i] -k。所以現在平均值必須> 0。但是大於零的平均值不僅僅意味着總和大於零?所以我可以直接應用Kadane的算法。我對嗎? (總是在約束下,有1個正值)最大的子陣列變化
Q
最大的子陣列變化
1
A
回答
4
不,kadane的算法仍然會找到你的最大和的子陣列...我必須解決同樣的問題。到目前爲止,我發現如果我們像上面提到的那樣創建數組B,然後創建包含數組B的部分和的數組C,那麼我們查找的最大間隔(i,j)具有相同的數字爲我和j!例如:
陣列A是:1 10 -1 -1 4 -1 7 2 8 1 .....並且給定k是5然後 陣列B是:-4 5 -6 -6 -1 -6 2 -3 3 -4 array C是:-4 1 -5 -11 -12 -18 -16 -19 -16 -20 所以我們要找的子數組是[7,2,8],長度爲3,並且具有相同的第一個和最後一個元素,即-16 !!!!我忘了告訴我們正在尋找一個O(n)或O(n * logn)算法.... @lets_solve_it你是對的,但你的算法是O(n^2)whitch是對於我們想要處理的數據來說,這種方式很重要。我接近用C++中的函數圖解決它,這就像一個哈希表。我這是正確的方向,因爲這裏數組C的元素與它們的索引有直接關係!另外,我們的教授告訴我們,另一個可能的解決方案是再次製作數組C,然後採用(特殊的)數據透視進行快速排序......但我不完全明白我們期望從快速排序中做什麼。
2
@ panos7:
已創建後陣列C(部分和陣列上),尋求C,Ci和Cj的兩個值,
使得,CJ> =次,和,(ジ)儘可能「大」。 (j-i)→MAX。
然後返回j-i。
在你的榜樣,-16> = - 18,所以你返回J-11 = 9-6 = 3
這是正確的答案!
相關問題
- 1. 最大子陣列
- 2. 找到最大子陣列
- 3. HackerRank最大子陣列
- 4. 最大的子陣列 - 運行時
- 5. Spoj-陣列的最大子集
- 6. K-子集最大的變化
- 7. 找出陣列中非負數的最大子陣列
- 8. 陣列2D最大值的陣列
- 9. 查找陣列中具有最大度數的最小子陣列的長度
- 10. 從陣列中選擇最大子陣列
- 11. 陣列的最大值
- 12. 2D矩陣內HxW的最大子陣列
- 13. 未初始化陣列中的最小值和最大值
- 14. 2D矩陣中單個列的最小 - 最大規範化
- 15. 子陣最大總和
- 16. 矩陣陣列的最大部分
- 17. 最長的子陣列
- 18. jQuery的變化陣列串
- 19. 從大陣列中拉出子陣列
- 20. 2D陣列的最小/最大元素
- 21. 配對陣列的最小最大和
- 22. 陣列的最大和最小數字
- 23. 變化的陣列或矩陣
- 24. 陣列最大索引Swift
- 25. 陣列最大長度
- 26. 獲取最大陣列
- 27. 獲得最大陣列數
- 28. 最大的價值在列表陣列
- 29. 運行分而治之算法打印陣列中的最大子陣列值