C.滑动窗口——1423. 可获得的最大点数

题目链接:1423. 可获得的最大点数(中等)

算法原理:

👉对应力扣题解

解法:滑动窗口

击败88.38%

时间复杂度O(N)

由于每次只从两侧选取最大值,故中间部分必然连续

问题由此可转化成:

窗口大小:n-k(n是数组长度),找窗口内最小值,返回值:总和-窗口内最小和

其余跟C.滑动窗口------1456. 定长子串中元音的最大数目(模板题)一样

**小细节:**当窗口大小==0时,left会越界访问,所以直接返回数组内所有元素的和即可

注:此题不能贪心

java 复制代码
class Solution {
    public int maxScore(int[] nums, int k) {
        int n=nums.length;
        int ret=0,len=0;
        int left=0,right=n-1;
        while(left<=right){
            if(nums[left]>=nums[right]) ret+=nums[left++];
            else ret+=nums[right--];
            len++;
            if(len==k) return ret;
        }
        return 0;
    }
}

当案例是1,2,3,4,5,6,1时贪左边,会导致选左边,右边同理

JAVA代码:

java 复制代码
class Solution {
    public int maxScore(int[] nums, int kk) {
        //解法:滑动窗口
        //问题转换:窗口长度:n-k,找窗口内的最小值
        int n=nums.length;
        int k=n-kk,ret=0x3f3f3f3f,sum=0;
        int total=0;
        for(int x:nums) total+=x;
        if(k==0) return total;
        for(int right=0;right<n;right++){
            int left=right-k+1;
            //进窗口
            sum+=nums[right];
            if(left<0) continue;
            //更新
            ret=Math.min(ret,sum);
            //出窗口
            sum-=nums[left];
        }
        return total-ret;
    }
}
相关推荐
「QT(C++)开发工程师」8 分钟前
C++11 std::unique_ptr — 独占所有权的智能指针
c语言·开发语言·c++·qt
不会就选b20 分钟前
算法日常・每日刷题--<BFS拓扑排序>4
算法
不正经学生29 分钟前
C语言动态内存管理(上):堆上的自由与责任
c语言·开发语言·c++·算法·面试
伟大的车尔尼30 分钟前
贪心的概念
数据结构·算法·贪心
方方洛1 小时前
vllm教程-00-前言与导读
人工智能·算法·vllm
AI情绪识别开源1 小时前
检信AI高一分班分科智选评估系统 v2.0测试报告
开发语言·数据结构·人工智能·科技
纯.Pure_Jin(g)1 小时前
靶场PHP函数整理+防御方式
开发语言·php·ctf
IT毕设实战小研1 小时前
电影数据可视化推荐系统
大数据·后端·爬虫·python·算法·信息可视化·课程设计
且随疾风前行.1 小时前
从驱动来分析服务的添加过程
算法
CoderYanger1 小时前
A.每日一题:输入单词需要的最少按键次数 Ⅰ+Ⅱ
java·数据结构·算法·leetcode·面试