当前位置: 首页 > news >正文

西宁公司网站建设四川建设工程信息网官网

西宁公司网站建设,四川建设工程信息网官网,网站被禁用如何解决,网站开发与设计实训实训报告题目解析#xff1a;1423. 可获得的最大点数 Problem: 1423. 可获得的最大点数 题目描述#xff1a; 你有一个整数数组 cardPoints#xff0c;表示排成一行的几张卡牌的点数。你每次可以从这排卡牌的 开头或末尾 拿一张卡牌#xff0c;最终你需要正好拿 k 张卡牌。目…题目解析1423. 可获得的最大点数 Problem: 1423. 可获得的最大点数 题目描述 你有一个整数数组 cardPoints表示排成一行的几张卡牌的点数。你每次可以从这排卡牌的 开头或末尾 拿一张卡牌最终你需要正好拿 k 张卡牌。目标是计算你能够拿到的 最大点数。 示例 示例 1 输入cardPoints [1, 2, 3, 4, 5, 6, 1], k 3输出12解释最优选择是从右侧拿三张卡牌点数为 1 6 5 12。 示例 2 输入cardPoints [2, 2, 2], k 2输出4解释不管选择哪两张牌总是 2 2 4。 示例 3 输入cardPoints [9, 7, 7, 9, 7, 7, 9], k 7输出55解释所有卡牌都需要选择所以直接将它们的和返回。 解题思路 方法一正向思维暴力法 最直接的思路就是使用正向思维从数组的两端开始取卡牌。我们可以从数组的开头拿一些卡牌剩下的从末尾拿。为了找到能够获得的最大点数尝试不同的取卡顺序计算所有可能的组合得分。 正向思维的具体步骤 从开头拿 0 到 k 张卡牌剩余的从末尾拿。枚举所有可能的组合计算其点数。选择点数最大的作为结果。 虽然这个方法能解出问题但时间复杂度是 O(k)对于较大的 k 值计算速度会变慢。 代码实现 class Solution { public:int maxScore(vectorint cardPoints, int k) {int n cardPoints.size();int leftSum 0, rightSum 0;// 先计算最左侧k张牌的总和for (int i 0; i k; i) {leftSum cardPoints[i];}int maxPoints leftSum;// 逐步将左侧的卡牌移到右侧同时更新最大得分for (int i 0; i k; i) {leftSum - cardPoints[k - 1 - i]; // 从左侧减少一张卡牌rightSum cardPoints[n - 1 - i]; // 从右侧增加一张卡牌maxPoints max(maxPoints, leftSum rightSum);}return maxPoints;} }; 复杂度分析 时间复杂度O(k)。我们需要遍历 k 次来计算所有可能的得分。空间复杂度O(1)。只使用了常量级别的额外空间。 方法二滑动窗口优化逆向思维 上面的正向思维方法虽然能够解决问题但效率相对较低。我们可以通过逆向思维使用滑动窗口优化。 关键点 我们可以将问题转化为滑动窗口问题通过取出未选择的卡牌部分来最大化剩余部分的和。具体来说卡牌的总数为 n我们选择的卡牌总数为 k则有 n - k 张卡牌是不被选择的。如果能找到不被选择的 n - k 张卡牌的最小和那么总和减去这部分卡牌和就是我们需要的最大点数。 优化思路 首先计算卡牌的总和 totalSum。使用滑动窗口法找出大小为 n - k 的子数组的最小和。最大点数就是 totalSum - minWindowSum。 通过这个方法问题的复杂度从暴力解法的 O(2^k) 优化为 O(n)大大提升了效率。 代码实现 class Solution { public:int maxScore(vectorint cardPoints, int k) {int n cardPoints.size();// 如果k等于数组长度直接返回整个数组的和if (k n) {return accumulate(cardPoints.begin(), cardPoints.end(), 0);}// 计算总点数int totalPoints accumulate(cardPoints.begin(), cardPoints.end(), 0);// 滑动窗口的长度为n - k找到最小的窗口和int windowSize n - k;int currentWindowSum accumulate(cardPoints.begin(), cardPoints.begin() windowSize, 0);int minWindowSum currentWindowSum;// 使用滑动窗口计算最小的窗口和for (int i windowSize; i n; i) {currentWindowSum cardPoints[i] - cardPoints[i - windowSize];minWindowSum min(minWindowSum, currentWindowSum);}// 最大点数为总点数减去最小的窗口和return totalPoints - minWindowSum;} };复杂度分析 时间复杂度O(n)我们只需遍历数组两次一次用于计算总和一次用于计算最小滑动窗口和。空间复杂度O(1)除了存储几个辅助变量外代码不需要额外的空间。
http://www.hkea.cn/news/14324896/

相关文章:

  • 丰台电子网站建设教育类小程序开发
  • 外链发布论坛seo网站优化推广怎么做
  • seo网站案例公司的网站如何建设
  • 网站建设服务预算wordpress获得链接
  • 建设一个中英文双版的网站购买了域名之后怎么做网站
  • u网站建设徐州专业三合一网站开发
  • 门户网站建设目标东莞seo网络推广专
  • 专业北京网站建设公司排名php做网站安性如何
  • 建设一个网站多钱怎么推广淘宝店铺
  • 如何做简单的网站 域名邮箱网站建设培训学校广州
  • asp网站抓取全国平面设计大赛官网
  • 分销系统小程序深圳seo优化关键词排名
  • 新网登录网站后台网站建设要学哪种计算机语言
  • 福建中兴建设有限公司网站深圳市住房和建设局网站登录
  • wordpress首页地址网站建设及优化 赣icp
  • 铁岭做网站哪家好宁波网页设计制作公司
  • 合肥专业网站建设公司哪家好去菲律宾做it网站开发
  • 网站开发基础知识做本地网站卖
  • 邢台高端网站建设小江网站建设公司
  • 做的网站 如何在局域网内访问网站建设成功案例宣传
  • 母婴网站设计开发上线一个网站需要多少钱
  • 购物的网站功能网站后台用什么程序做
  • 东光网站制作武夷山建设局网站
  • cms企业网站管理系统做网站的背景照
  • 网站建设都需要哪些材料wordpress排序desc
  • 湖北孝感展示型网站建设价格开平小学学生做平网站
  • wordpress access佛山网站seo哪家好
  • 建设网站情况说明范文配资网站开发
  • 网站建设设计流程图wordpress图片中文不显示解决
  • 单机网页游戏网站招商外包