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

专门做毕设的网站seo搜索引擎优化技术教程

专门做毕设的网站,seo搜索引擎优化技术教程,厦门酒店网站建设,iis做外网站点题目解析:1423. 可获得的最大点数 > Problem: 1423. 可获得的最大点数 题目描述: 你有一个整数数组 cardPoints,表示排成一行的几张卡牌的点数。你每次可以从这排卡牌的 开头或末尾 拿一张卡牌,最终你需要正好拿 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
    • 解释:所有卡牌都需要选择,所以直接将它们的和返回。

解题思路:

方法一:正向思维(暴力法)

最直接的思路就是使用正向思维,从数组的两端开始取卡牌。我们可以从数组的开头拿一些卡牌,剩下的从末尾拿。为了找到能够获得的最大点数,尝试不同的取卡顺序,计算所有可能的组合得分。

正向思维的具体步骤:
  1. 从开头拿 0 到 k 张卡牌,剩余的从末尾拿。
  2. 枚举所有可能的组合,计算其点数。
  3. 选择点数最大的作为结果。

虽然这个方法能解出问题,但时间复杂度是 O(k),对于较大的 k 值,计算速度会变慢。

代码实现:
class Solution {
public:int maxScore(vector<int>& 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 张卡牌的最小和,那么总和减去这部分卡牌和,就是我们需要的最大点数。
优化思路:
  1. 首先计算卡牌的总和 totalSum
  2. 使用滑动窗口法,找出大小为 n - k 的子数组的最小和。
  3. 最大点数就是 totalSum - minWindowSum

通过这个方法,问题的复杂度从暴力解法的 O(2^k) 优化为 O(n),大大提升了效率。


代码实现:

class Solution {
public:int maxScore(vector<int>& 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.tj-hxxt.cn/news/6293.html

相关文章:

  • 商业网站域名后缀百度快速查询
  • 企业宣传册设计如何做优化排名
  • 网站建设公司大全seo百度点击软件
  • 三只小猪的题目登网站做搜索广告是什么
  • 哪个公司可以做网站爱站工具包下载
  • 人民日报体育北京网站优化对策
  • 德州网站seo广告投放数据分析
  • 沈阳模板建站系统搜索引擎优化案例
  • pdf做电子书下载网站日喀则网站seo
  • c 博客网站开发教程企业seo服务
  • c语言如何做网站百度系app有哪些
  • 政府网站 建设发展规划手机百度ai入口
  • google网站设计原则sem竞价托管公司
  • 范文写作网站汕头seo计费管理
  • 旅游网站制作方案品牌推广策略有哪几种
  • 路由器通过域名解析做网站网站seo专员招聘
  • 自己做的网站打不开怎么回事免费二级域名建站
  • 高端大气网站建设制作网页app
  • 有一个网站叫浪什么阿里云域名注册入口官网
  • 杭州建设工程信用平台seo技术教程博客
  • 网站图片上传却不显示怎么注册一个自己的网站
  • 做网站赚外快河南省人民政府
  • 赣州做网站多少钱seo基础培训教程
  • 哈尔滨建设网站制作域名注册平台哪个好
  • 响应式网站下载百度官方推广平台
  • 手机移动网站开发百度关键词如何优化
  • 数字货币网站开发需求站内推广方式
  • 网站建设评分二级域名网站免费建站
  • 礼服购物车网站模板网推项目接单平台
  • 做电商网站需要会些什么百度收录查询