Leetcode 517 超級洗衣機 C

2021-10-08 03:29:40 字數 1277 閱讀 1807

假設有 n 臺超級洗衣機放在同一排上。開始的時候,每台洗衣機內可能有一定量的衣服,也可能是空的。

在每一步操作中,你可以選擇任意 m (1 ≤ m ≤ n) 臺洗衣機,與此同時將每台洗衣機的一件衣服送到相鄰的一台洗衣機。

給定乙個非負整數陣列代表從左至右每台洗衣機中的衣物數量,請給出能讓所有洗衣機中剩下的衣物的數量相等的最少的操作步數。如果不能使每台洗衣機中衣物的數量相等,則返回 -1。

示例 1:

輸入: [1,0,5]

輸出: 3

解釋:

第一步: 1 0 <-- 5 => 1 1 4

第二步: 1 <-- 1 <-- 4 => 2 1 3

第三步: 2 1 <-- 3 => 2 2 2

示例 2:

輸入: [0,3,0]

輸出: 2

解釋:

第一步: 0 <-- 3 0 => 1 2 0

第二步: 1 2 --> 0 => 1 1 1

示例 3:

輸入: [0,2,0]

輸出: -1

解釋:

不可能讓所有三個洗衣機同時剩下相同數量的衣物。

n 的範圍是 [1, 10000]。

在每台超級洗衣機中,衣物數量的範圍是 [0, 1e5]。

貪心我們先統計衣服數量的總和sum,顯然當sum是洗衣機數量的整數倍時,才能使每台洗衣機的衣服數量相等,我們求出平均值

我們讓每個洗衣機的衣服數量減去這個平均數,表明它缺少或多出幾件衣服。由於每一步操作中一台洗衣機只能拿出一件衣服,因此如果洗衣機中衣服數x為正數,那麼操作步數至少為x。對於前i臺洗衣機,它們對應的數和若為y,那麼它們需要和後n-i臺洗衣機至少傳遞|y|次,操作步數至少為y。因此為了使當前狀態所有洗衣機衣服數量相等,需要max(machines[i],currmax)次,其中currmax是對於0~i的|y|的最大值。詳細過程見**

int

findminmoves

(vector<

int>

& machines)

return ans;

}

leetCode 517 超級洗衣機 1

517.超級洗衣機 假設有n臺超級洗衣機放在同一排上。開始的時候,每台洗衣機內可能有一定量的衣服,也可能是空的。在每一步操作中,你可以選擇任意 m 1 m n 臺洗衣機,與此同時將每台洗衣機的一件衣服送到相鄰的一台洗衣機。給定乙個非負整數陣列代表從左至右每台洗衣機中的衣物數量,請給出能讓所有洗衣機中...

leetcode超級醜數

1.n個指標 設primes.size n,則設定n個指標,初始為0,分別指向結果陣列中有資格與primes 0 primes n 1 相乘的元素的下標,取最小值,且最小值對應的指標的值加1,如下 class solution public int nthsuperuglynumber int n,...

LeetCode 906 超級回文數

如果乙個正整數自身是回文數,而且它也是乙個回文數的平方,那麼我們稱這個數為超級回文數。現在,給定兩個正整數l和r 以字串形式表示 返回包含在範圍 l,r 中的超級回文數的數目。示例 輸入 l 4 r 1000 輸出 4 解釋 4,9,121,以及 484 是超級回文數。注意 676 不是乙個超級回文...