@@ -0,0 +1,28 @@ | |||
use std::cmp; | |||
pub fn max_satisfaction(mut satisfaction: Vec<i32>) -> i32 { | |||
// First we want to sort the dishes, because the maximum like-time will come | |||
// when the last dishes are highest in number - then we just need to work out which ones to cull | |||
// there is one case that can probably be optimised: all negative (cook nothing) | |||
// but it might be easier to just build that into the starting logic | |||
satisfaction.sort_by(|a, b| b.cmp(a)); | |||
let mut max = 0; | |||
let mut sum = 0; // sum will count how much will be added by multiplying the end of the arr | |||
// Now loop backwards over the array seeing if it makes things better to add dishes | |||
// Note: The array has been reversed, so it's actually going forwards, trippy right? | |||
for dish in satisfaction { | |||
let total = max + dish + sum; // This is the total if this dish was added | |||
if total > max { | |||
sum = sum + dish; | |||
max = total; | |||
} else { | |||
return max; // we can't do better, stop here | |||
} | |||
} | |||
return cmp::max(0, max); | |||
} | |||
pub fn main() { | |||
println!("Expected: 20"); | |||
println!("Got: {}", max_satisfaction(vec![4, 3, 2])); | |||
} |
@@ -0,0 +1,39 @@ | |||
A chef has collected data on the satisfaction level of his n dishes. Chef can cook any dish in 1 unit of time. | |||
Like-time coefficient of a dish is defined as the time taken to cook that dish including previous dishes multiplied by its satisfaction level i.e. time[i]*satisfaction[i] | |||
Return the maximum sum of Like-time coefficient that the chef can obtain after dishes preparation. | |||
Dishes can be prepared in any order and the chef can discard some dishes to get this maximum value. | |||
Example 1: | |||
Input: satisfaction = [-1,-8,0,5,-9] | |||
Output: 14 | |||
Explanation: After Removing the second and last dish, the maximum total Like-time coefficient will be equal to (-1*1 + 0*2 + 5*3 = 14). Each dish is prepared in one unit of time. | |||
Example 2: | |||
Input: satisfaction = [4,3,2] | |||
Output: 20 | |||
Explanation: Dishes can be prepared in any order, (2*1 + 3*2 + 4*3 = 20) | |||
Example 3: | |||
Input: satisfaction = [-1,-4,-5] | |||
Output: 0 | |||
Explanation: People don't like the dishes. No dish is prepared. | |||
Example 4: | |||
Input: satisfaction = [-2,5,-1,0,3,-3] | |||
Output: 35 | |||
Constraints: | |||
n == satisfaction.length | |||
1 <= n <= 500 | |||
-10^3 <= satisfaction[i] <= 10^3 |
@@ -0,0 +1,5 @@ | |||
#!/bin/bash | |||
rustc main.rs | |||
./main | |||
rm main |