日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2021-08-19:超级洗衣机。假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机,

發(fā)布時間:2024/1/18 编程问答 35 豆豆

2021-08-19:超級洗衣機。假設有 n 臺超級洗衣機放在同一排上。開始的時候,每臺洗衣機內可能有一定量的衣服,也可能是空的。在每一步操作中,你可以選擇任意 m (1 ≤ m ≤ n) 臺洗衣機,與此同時將每臺洗衣機的一件衣服送到相鄰的一臺洗衣機。給定一個非負整數(shù)數(shù)組代表從左至右每臺洗衣機中的衣物數(shù)量,請給出能讓所有洗衣機中剩下的衣物的數(shù)量相等的最少的操作步數(shù)。如果不能使每臺洗衣機中衣物的數(shù)量相等,則返回 -1。

福大大 答案2021-08-19:

這道題是見過就會,沒見過就不會。
首先看能否平均分配。如果不能平均分配,就不進行下一步了;如果能平均分配,就下一步。
情況一,+a、i、-b,a正和b正取最大值。
情況二,+a、i、+b,a正和b正取最大值。
情況三,-a、i、-b,a正+b正。
情況四,-a、i、+b,a正和b正取最大值。
遍歷數(shù)組,取最大值就是需要的返回值。
代碼里第2種方法,數(shù)組的每個元素減去了平均值,方便計算。
時間復雜度:O(N)。
額外空間復雜度:O(1)。

代碼用golang編寫。代碼如下:

package mainimport "fmt"func main() {arr := []int{1, 2, 3, 4, 5}ret := findMinMoves1(arr)fmt.Println(ret)ret = findMinMoves2(arr)fmt.Println(ret) }func findMinMoves1(arr []int) int {if len(arr) == 0 {return 0}size := len(arr)sum := 0for i := 0; i < size; i++ {sum += arr[i]}if sum%size != 0 {return -1}avg := sum / sizeleftSum := 0ans := 0for i := 0; i < len(arr); i++ {leftRest := leftSum - i*avgrightRest := (sum - leftSum - arr[i]) - (size-i-1)*avgif leftRest < 0 && rightRest < 0 {ans = getMax(ans, Abs(leftRest)+Abs(rightRest))} else {ans = getMax(ans, getMax(Abs(leftRest), Abs(rightRest)))}leftSum += arr[i]}return ans }func findMinMoves2(arr []int) int {if len(arr) == 0 {return 0}size := len(arr)sum := 0for i := 0; i < size; i++ {sum += arr[i]}if sum%size != 0 {return -1}avg := sum / sizesum = 0//數(shù)組每個元素全部減去平均值for i := 0; i < size; i++ {arr[i] -= avgsum += arr[i]}leftSum := 0ans := 0for i := 0; i < len(arr); i++ {leftRest := leftSumrightRest := sum - leftSum - arr[i]if leftRest < 0 && rightRest < 0 {ans = getMax(ans, Abs(leftRest)+Abs(rightRest))} else {ans = getMax(ans, getMax(Abs(leftRest), Abs(rightRest)))}leftSum += arr[i]}//數(shù)組恢復for i := 0; i < size; i++ {arr[i] += avg}return ans }func Abs(a int) int {if a < 0 {return -a} else {return a} }func getMax(a int, b int) int {if a > b {return a} else {return b} }

執(zhí)行結果如下:


左神java代碼

總結

以上是生活随笔為你收集整理的2021-08-19:超级洗衣机。假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机,的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。