LeetCode-1423:可获得的最大点数
题目描述:
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。
你的点数就是你拿到手中的所有卡牌的点数之和。
给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。
示例 1:
输入:cardPoints = [1,2,3,4,5,6,1], k = 3
输出:12
解释:第一次行动,不管拿哪张牌,你的点数总是 1 。但是,先拿最右边的卡牌将会最大化你的可获得点数。最优策略是拿右边的三张牌,最终点数为 1 + 6 + 5 = 12 。
示例 2:
输入:cardPoints = [2,2,2], k = 2
输出:4
解释:无论你拿起哪两张卡牌,可获得的点数总是 4 。
思路分析:
记数组 cardPoints 的长度为 n,由于只能从开头和末尾拿 k 张卡牌,所以最后剩下的必然是连续的 n−k 张卡牌。
我们可以通过求出剩余卡牌点数之和的最小值,来求出拿走卡牌点数之和的最大值。
算法
由于剩余卡牌是连续的,使用一个固定长度为 n−k 的滑动窗口对数组cardPoints 进行遍历,求出滑动窗口最小值,然后用所有卡牌的点数之和减去该最小值,即得到了拿走卡牌点数之和的最大值。
class Solution {public int maxScore(int[] cardPoints, int k) {int len=cardPoints.length;int sum=0;int widowSize=len-k;for(int i=0;i<widowSize;i++){sum+=cardPoints[i];}int minSum=sum;for(int i=widowSize;i<len;i++){sum=sum+cardPoints[i]-cardPoints[i-widowSize];minSum=Math.min(minSum,sum);}return Arrays.stream(cardPoints).sum() - minSum;}
}
LeetCode-1423:可获得的最大点数相关推荐
- leetcode 1423. 可获得的最大点数(滑动窗口)
几张卡牌 排成一行,每张卡牌都有一个对应的点数.点数由整数数组 cardPoints 给出. 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌. 你的点数就是你拿到手中的所有 ...
- 1423. 可获得的最大点数
链接:1423. 可获得的最大点数 题解:https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/solut ...
- 1423. 可获得的最大点数 maxScore
1423. 可获得的最大点数 maxScore 一.解题思路 1.解法一( Java ) 解法思路:滑动窗口(选定不需要的卡牌作为窗口) 由于剩余卡牌是连续的,使用一个固定长度为 n−k 的滑动窗口对 ...
- leetcode算法题--删除与获得点数★
原题链接:https://leetcode-cn.com/problems/delete-and-earn/ 相关题目:打家劫舍 以nums数组最大的数来作为字典的最大索引,比如最大数为max,那么字 ...
- LeetCode 149 直线上最多的点数
一.题目介绍 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | ...
- leetcode 149. 直线上最多的点数
题目 给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点.求最多有多少个点在同一条直线上. 示例 1: 输入:points = [[1,1],[ ...
- LeetCode 第 186 场周赛(1060/3107,前34.1%)
文章目录 1. 比赛结果 2. 题目 1. LeetCode 5392. 分割字符串的最大得分 easy 2. LeetCode 5393. 可获得的最大点数 medium 3. LeetCode 5 ...
- leetcode总结
目录 1610. 可见点的最大数目 链表 合并链表 148. 排序链表 21. 合并两个有序链表 23. 合并K个升序链表 反转链表 92. 反转链表 II 206. 反转链表 143 ...
- leetcode 滑动窗口
滑动窗口 文章目录 滑动窗口 模板框架 [76. 最小覆盖子串](https://leetcode-cn.com/problems/minimum-window-substring/) 思路分析 代码 ...
- LeetCode题解汇总
题目 推荐指数 1. 两数之和 1 2. 两数相加 1 4. 寻找两个正序数组的中位数 2AAAA 6. Z 字形变换 1 7. 整数反转 2 8. 字符串转换整数 (atoi) 2AAA 9. 回文 ...
最新文章
- WindowsPhone基础琐碎总结-----数据绑定(一)
- socket read阻塞_go tcp中的ioutil.ReadAll阻塞的问题
- 嵌入式系统串口解析二进制数_嵌入式系统Bootloader分析及DSP56F800串口加载功能实现...
- 关于Oracle回收站的一些操作
- oracle追踪触发器语句,Oracle中怎样通过触发器来追踪用户的活动?
- 02-普通轮播图-上下滚动
- 攻击人脸识别,最高奖励10万 | 微众银行第二届金融科技高校技术大赛正式启动...
- html定位 浏览器兼容,IE6浏览器不支持固定定位(position:fixed)解决方案
- 在HTML中如何把块的边框做成圆角
- java表格怎么添加按钮_1.6.2 在表格中添加按钮
- LookUpEditPopup自动调整宽度
- 我的 HTTP/1.1 好慢啊!
- java、js的编码、解码
- vue的下拉框如何回显_JAVA学习笔记系列:菜鸟Vue学习笔记(三)
- C9:Unity3D制作智能家居设计软件——导入户型图自动设计(算法剖析+源码实现篇)
- 为什么qq相册显示服务器数据错误,玩qq空间常遇到的问题及解决办法_qq空间
- C++语句 与简单方法
- 解决 Chrome 使用高德地图卡顿
- 《Java程序员,上班那点事儿》荣登北京新华书店销售榜第2名,立贴纪念!
- SpringCloud(13)之微服务的现状和未来