一人の料理人がn個の料理に満足を集め、この料理人が各料理を作る時間は1ユニット時間です。
皿の「お気に入りの時間」係数は、皿を調理するのにかかる時間として定義され、前の各皿に皿の満足度を掛けたもの、つまり時間[i] *満足度[i]です。
すべての料理の「ラブタイム」の合計の最大値を返してください。
調理の順序は任意の順序で調整できます。また、調理をあきらめて、より大きな金額を取得することもできます。
例1:
入力:満足度= [-1、-8,0,5、-9]
出力:14
説明:2番目と最後の料理を削除します。お気に入りの最大時間係数の合計は(-1 * 1 + 0 * 2 + 5)です* 3 = 14)。各料理は完了するまでに1単位時間かかります。
例2:
入力:満足度= [4,3,2]
出力:20
説明:元の順序と逆の順序で調理します(2 * 1 + 3 * 2 + 4 * 3 = 20)
例3:
入力:満足度= [-1、-4、-5]
出力:0
説明:誰もがこれらの料理を好まないので、料理をしなくても最大のお気に入りの時間係数を得ることができます。
例4:
入力:満足度= [-2,5、-1,0,3、-3]
出力:35
ヒント:
n ==満足度。長さ
1 <= n <= 500
-10 ^ 3 <=満足度[i] <= 10 ^ 3
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/reducing-dishes
著作権は控除ネットワークに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。
アイデア:
最初に、質問で与えられたnが500以内であることを確認します。これは比較的小さいため、ブルートフォース法を直接試すことができます。
タイトルから、満足度の高い料理を後ろに置くと、掛けるのに時間がかかることがわかります。
したがって、満足度の低い料理を最初に準備するために、満足度を最初に小さいものから大きいものに並べ替えることができます。
次に、暴力の2サイクルを使用してすべての組み合わせを処理し、答えを見つけます。
時間の複雑さ:O(N ^ 2)
スペースの複雑さ:O(1)
class Solution(object):
def maxSatisfaction(self, satisfaction):
"""
:type satisfaction: List[int]
:rtype: int
"""
res = 0
s = sorted(satisfaction)
for i in range(len(s)):
time = 1 # 从开始做菜过去的时间
tmp = 0 # 这一种做菜安排的答案
for j in range(i, len(s)):
tmp += time * s[j]
time += 1
res = max(tmp, res)
return res