我正在嘗試編寫從給定數組的連續子數組中給出最大總和的scala代碼。例如,val arr= Array(-2, -3, 4, -1, -2, 1, 5, -3)
。在這個數組中,我需要得到最大的連續的子數組總和,即4 +( - 1)+( - 2)+(1)+5 = 7.我寫下面的代碼來獲得這個結果。是否有可能根據條件更新foldLeft函數中的變量?
scala> arr.foldLeft(0) { (currsum,newnum) => if((currsum+newnum)<0) 0 else { if(currsum<(currsum+newnum)) (currsum+newnum) else currsum }}
res5: Int = 10
但是從實際結果偏離,因爲我無法爲計數/求和繼續更新maximum_so_far
值。由於我使用foldLeft
來執行此功能,只有當連續的子數組元素的和大於先前的max_sum時,纔有可能更新maximum_so_far
變量?
reference link for better understanding of scenario
你是什麼意思的「連續的子陣列」? – Jubobs
@Jubobs,它意味着最大。 sum應包含來自子數組/數組的連續元素。這意味着來自給定陣列的4 +( - 1)+( - 2)+(1)+5 = 7的總和,但不是4 + 1 + 5 = 10的總和。爲了更好地理解場景,請查看以上問題底部提供的鏈接。感謝 – Mahesh
您的代碼沒有'maximum_so_far'值,因此您不清楚您的意思。但是通常在foldLeft中,你不會「更新」一個變量,而是將累加器中的新值傳遞給下一次迭代。因此,不要只傳遞'currsum'來傳遞一對'(currsum,maxsofar)'並根據需要提取這些值。 –