题目
我的题解
将所有的菜按照喜爱度从小到大排序,算出全部做出来的结果标志为base state。然后观察可以发现,每减少一道菜,结果=上次的结果-(全部菜喜爱度-减少了的菜的喜爱度)。这样就可以算出来,完全是数学解法。
public int maxSatisfaction(int[] satisfaction) {
Arrays.sort(satisfaction);
if (satisfaction[satisfaction.length - 1] <= 0) {
return 0;
}
int max = 0; // 最大满意度
for (int i = 0; i < satisfaction.length; i++) {
max += (i + 1) * satisfaction[i];
}
int minus = 0; // 减掉的数
for (int j : satisfaction) {
minus += j;
}
int current = max - minus;
max = Math.max(max, current);
for (int i = 1; i < satisfaction.length; i++) {
minus -= satisfaction[i - 1];
current -= minus;
max = Math.max(max, current);
}
return max;
}
总结
- 数学解法,注意规律,注意思考。