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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

福大大 答案2021-08-19:

這道題是見(jiàn)過(guò)就會(huì),沒(méi)見(jiàn)過(guò)就不會(huì)。
首先看能否平均分配。如果不能平均分配,就不進(jìn)行下一步了;如果能平均分配,就下一步。
情況一,+a、i、-b,a正和b正取最大值。
情況二,+a、i、+b,a正和b正取最大值。
情況三,-a、i、-b,a正+b正。
情況四,-a、i、+b,a正和b正取最大值。
遍歷數(shù)組,取最大值就是需要的返回值。
代碼里第2種方法,數(shù)組的每個(gè)元素減去了平均值,方便計(jì)算。
時(shí)間復(fù)雜度:O(N)。
額外空間復(fù)雜度: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ù)組每個(gè)元素全部減去平均值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ù)組恢復(fù)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í)行結(jié)果如下:


左神java代碼

總結(jié)

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

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