Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 9f8b014

Browse files
committed
maximum-points-you-can-obtain-from-cards method 2
1 parent 489c0e4 commit 9f8b014

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

src/bin/maximum-points-you-can-obtain-from-cards.rs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
fn main() {
2-
assert_eq!(232, Solution::max_score(vec![11, 49, 100, 20, 86, 29, 72], 4));
2+
assert_eq!(232, Solution::max_score1(vec![11, 49, 100, 20, 86, 29, 72], 4));
33
}
44

55
struct Solution;
@@ -15,13 +15,36 @@ impl Solution {
1515
let mut sum1: i32 = card_points[0..other].iter().sum();
1616
let mut sum = sum1;
1717

18-
for i in 1..card_points.len() - other+1 {
19-
sum = sum + card_points[other + i - 1] - card_points[i-1];
18+
for i in 1..card_points.len() - other + 1 {
19+
sum = sum + card_points[other + i - 1] - card_points[i - 1];
2020
if sum1 > sum {
2121
sum1 = sum;
2222
}
2323
}
2424

2525
card_points.iter().sum::<i32>() - sum1
2626
}
27+
28+
/// 正向求解,假设起始和为前面k个元素的和sum
29+
/// 然后sum-card_points[k-1]+card_points[len(card_points)-1]的和,与sum比较,依次类推,找出最大的和
30+
pub fn max_score1(card_points: Vec<i32>, k: i32) -> i32 {
31+
let mut sum = card_points[..k as usize].iter().sum();
32+
let mut sum1 = sum;
33+
34+
let mut s = k as usize;
35+
loop {
36+
if s == 0 {
37+
break;
38+
}
39+
40+
sum1 = sum1 - card_points[s - 1] + card_points[card_points.len() - (k as usize - s + 1)];
41+
if sum1 > sum {
42+
sum = sum1;
43+
}
44+
45+
s -= 1;
46+
}
47+
48+
sum
49+
}
2750
}

0 commit comments

Comments
 (0)