1423.可获得的最大点数
链接:1423.可获得的最大点数
难度:Medium
标签:数组、前缀和、滑动窗口
简介:给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。
题解 1 - typescript
- 编辑时间:2021-02-06
- 执行用时:80ms
- 内存消耗:46.5MB
- 编程语言:typescript
- 解法介绍:利用滑动窗口减少次数判断。
function maxScore(cardPoints: number[], k: number): number {
const len = cardPoints.length;
let rightNum = 0;
let num = cardPoints.slice(0, k).reduce((total, cur) => total + cur, 0);
let max = num;
while (rightNum < k) {
max = Math.max(
max,
(num = num - cardPoints[k - rightNum - 1] + cardPoints[len - rightNum - 1])
);
rightNum++;
}
return max;
}
题解 2 - python
- 编辑时间:2023-12-03
- 执行用时:92ms
- 内存消耗:26.23MB
- 编程语言:python
- 解法介绍:滑动窗口记录左右两侧。
class Solution:
def maxScore(self, cardPoints: List[int], k: int) -> int:
n = len(cardPoints)
l = sum(cardPoints[0:k])
r = 0
ans = l
for i in range(k):
r += cardPoints[n - 1 - i]
l -= cardPoints[k - 1 - i]
ans = max(ans, l + r)
return ans
题解 3 - rust
- 编辑时间:2023-12-03
- 执行用时:8ms
- 内存消耗:3.19MB
- 编程语言:rust
- 解法介绍:同上。
impl Solution {
pub fn max_score(card_points: Vec<i32>, k: i32) -> i32 {
let k = k as usize;
let n = card_points.len();
let mut l = card_points[0..k].iter().sum::<i32>();
let mut r = 0;
let mut ans = l;
for i in 0..k {
r += card_points[n - 1 - i];
l -= card_points[k - 1 - i];
ans = ans.max(l + r);
}
ans
}
}