其他分享
首页 > 其他分享> > 可获得的最大点数

可获得的最大点数

作者:互联网

可获得的最大点数

滑动窗口的方法
思路:设计数组cardPoints,数组的长度为l,由于只可以在左边或者右边去拿卡牌,中间留下的肯定是一个l-k的连续数组,这样就可以用一个滑动窗口来写。
可以先求出连续子数组l-k的最小值,这样就可以得到拿走k张卡牌的最大值。
java代码
package 可获得的最大点数;

import java.util.Arrays;
import java.util.Scanner;

public class Solution {
public int maxScore(int[] cardPoints, int k) {
int l=cardPoints.length;
int Windowsize=l-k;
int sum=0;
for(int i=0;i<Windowsize;i++) {
sum+=cardPoints[i];
}
int Minsum=sum;
for(int i=Windowsize;i<l;i++) {
sum+=cardPoints[i]-cardPoints[i-Windowsize];
Minsum=Math.min(sum,Minsum);
}
return Arrays.stream(cardPoints).sum()-Minsum;

}

public static void main(String[] args) {
	// TODO 自动生成的方法存根
	int a[]= {1,2,3,4,5,6,1};
	Scanner sc=new Scanner(System.in);
	int k=sc.nextInt();
	Solution s=new Solution();
	System.out.println(s.maxScore(a, k));
	

}

}

运行截图:
输入
定义的数组为int a[]= {1,2,3,4,5,6,1};
输入k的值为3 ,得到的最大值为12;
复杂度分析:
时间复杂度:O(n),其中n为数组长度l,
空间复杂度:O(1)
总结:
初步了解到stream的使用,可以将数组中的元素遍历一遍,在用sum()方法求出数组元素的总和。

本次做题有参考到力扣官网的解法,十分感谢!
地址链接:https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/solution/ke-huo-de-de-zui-da-dian-shu-by-leetcode-7je9/

标签:最大,int,cardPoints,sum,获得,Minsum,数组,点数,Scanner
来源: https://blog.csdn.net/qq_45384944/article/details/113738446