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

定长滑动窗口(LeetCode——1423.可获得的最大点数)

题目 

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/maximum-points-you-can-obtain-from-cards

几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。

每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。

你的点数就是你拿到手中的所有卡牌的点数之和。

给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。

 题解

直接使用定长滑动窗口解决显然不行,虽然是给定的长度k,但是拿走卡牌是从两边拿走的不是在窗口中操作的。

我们可以用逆向思维,我们要拿走最大点数的卡牌虽然是从两边拿走的,那么我们留下来的卡牌就是和为最小点数的卡牌,我们的窗口也就是留下来的卡牌。并且值得注意是题目没有要求我们要从两边要拿取固定的牌数,也就是我们可以只从一边拿牌,这样我们的窗口就可以从头遍历到尾。

class Solution {
    public int maxScore(int[] cardPoints, int k) {
        int n=cardPoints.length;
        int count = 0;
        int sum = 0;
        for (int i = 0; i < n - k; i++) {
            sum += cardPoints[i];
            count += cardPoints[i];
        }
        int ans = count;
        for (int i = n - k; i < n; i++) {
            sum += cardPoints[i];
            count += cardPoints[i] - cardPoints[i - (n - k)];
            ans = Math.min(ans, count);
        }
        return sum - ans;
    }
}

 

 


http://www.kler.cn/a/403055.html

相关文章:

  • PHP实现选择排序
  • 「Mac玩转仓颉内测版19」PTA刷题篇10 - L1-010 比较大小
  • 前端-react(class组件和Hooks)
  • CSS布局学习1
  • 【前端】第12节:Vue3新特性
  • aws凭证(一)凭证存储
  • layui 输入框带清空图标和分词搜索功能
  • 人工智能之机器学习2-有监督学习【培训机构学习笔记】
  • ros2 humble 安装 navigation2
  • 用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错
  • 基于yolov8、yolov5的玉米病害检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • OpenCV自学系列(2)——核心操作(core operations)
  • 07架构面试题
  • 概率论之常见分布与matlab绘图
  • 如何更改手机GPS定位
  • 机器学习 AdaBoost 算法
  • 使用Python推送FLV流
  • 《Vue零基础教程》(1)Vue简介
  • C# AutoMapper 10个常用方法总结
  • Spring Boot 项目 myblog 整理
  • 智能购物时代:AI在电商平台的革命性应用
  • 针对AI增强图像大规模鲁棒性测试的数据集
  • 15分钟学 Go 实战项目六 :统计分析工具项目(30000字完整例子)
  • ssl证书,以 Nginx 为例
  • 如何构建高效的接口自动化测试框架?
  • Halcon 分割之区域生长法