题目描述:

几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 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:可获得的最大点数相关推荐

  1. leetcode 1423. 可获得的最大点数(滑动窗口)

    几张卡牌 排成一行,每张卡牌都有一个对应的点数.点数由整数数组 cardPoints 给出. 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌. 你的点数就是你拿到手中的所有 ...

  2. 1423. 可获得的最大点数

    链接:1423. 可获得的最大点数 题解:https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/solut ...

  3. 1423. 可获得的最大点数 maxScore

    1423. 可获得的最大点数 maxScore 一.解题思路 1.解法一( Java ) 解法思路:滑动窗口(选定不需要的卡牌作为窗口) 由于剩余卡牌是连续的,使用一个固定长度为 n−k 的滑动窗口对 ...

  4. leetcode算法题--删除与获得点数★

    原题链接:https://leetcode-cn.com/problems/delete-and-earn/ 相关题目:打家劫舍 以nums数组最大的数来作为字典的最大索引,比如最大数为max,那么字 ...

  5. LeetCode 149 直线上最多的点数

    一.题目介绍 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | |        o | ...

  6. leetcode 149. 直线上最多的点数

    题目 给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点.求最多有多少个点在同一条直线上. 示例 1: 输入:points = [[1,1],[ ...

  7. LeetCode 第 186 场周赛(1060/3107,前34.1%)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode 5392. 分割字符串的最大得分 easy 2. LeetCode 5393. 可获得的最大点数 medium 3. LeetCode 5 ...

  8. leetcode总结

    目录 1610. 可见点的最大数目 链表 合并链表 148. 排序链表    21. 合并两个有序链表   23. 合并K个升序链表 反转链表  92. 反转链表 II  206. 反转链表  143 ...

  9. leetcode 滑动窗口

    滑动窗口 文章目录 滑动窗口 模板框架 [76. 最小覆盖子串](https://leetcode-cn.com/problems/minimum-window-substring/) 思路分析 代码 ...

  10. LeetCode题解汇总

    题目 推荐指数 1. 两数之和 1 2. 两数相加 1 4. 寻找两个正序数组的中位数 2AAAA 6. Z 字形变换 1 7. 整数反转 2 8. 字符串转换整数 (atoi) 2AAA 9. 回文 ...

最新文章

  1. WindowsPhone基础琐碎总结-----数据绑定(一)
  2. socket read阻塞_go tcp中的ioutil.ReadAll阻塞的问题
  3. 嵌入式系统串口解析二进制数_嵌入式系统Bootloader分析及DSP56F800串口加载功能实现...
  4. 关于Oracle回收站的一些操作
  5. oracle追踪触发器语句,Oracle中怎样通过触发器来追踪用户的活动?
  6. 02-普通轮播图-上下滚动
  7. 攻击人脸识别,最高奖励10万 | 微众银行第二届金融科技高校技术大赛正式启动...
  8. html定位 浏览器兼容,IE6浏览器不支持固定定位(position:fixed)解决方案
  9. 在HTML中如何把块的边框做成圆角
  10. java表格怎么添加按钮_1.6.2 在表格中添加按钮
  11. LookUpEditPopup自动调整宽度
  12. 我的 HTTP/1.1 好慢啊!
  13. java、js的编码、解码
  14. vue的下拉框如何回显_JAVA学习笔记系列:菜鸟Vue学习笔记(三)
  15. C9:Unity3D制作智能家居设计软件——导入户型图自动设计(算法剖析+源码实现篇)
  16. 为什么qq相册显示服务器数据错误,玩qq空间常遇到的问题及解决办法_qq空间
  17. C++语句 与简单方法
  18. 解决 Chrome 使用高德地图卡顿
  19. 《Java程序员,上班那点事儿》荣登北京新华书店销售榜第2名,立贴纪念!
  20. SpringCloud(13)之微服务的现状和未来

热门文章

  1. node.js + express 初体验【hello world】
  2. tomcat安全认证
  3. Oracle truncate和delete的区别
  4. oopc——1.抽象
  5. 自编码 Autoencoder
  6. matlab图像分类器,[转载]两种图像分类算法和matlab源代码
  7. 神奇的编码C语言,神奇的fans (C语言代码)
  8. 回顾丨2021数据库大咖讲坛(第6期)视频PPT互动问答
  9. 《Oracle RAC 高并发系统的故障诊断》直播资料大放送
  10. Oracle RAC环境下如何定位并杀掉最终阻塞的会话