首页 > 其他分享 >2024.2.5寒假每日总结27

2024.2.5寒假每日总结27

时间:2024-02-05 20:11:07浏览次数:32  
标签:2024.2 27 下标 nums int 示例 back 寒假 front

LeetCode

跳跃游戏 VI

1696. 跳跃游戏 VI - 力扣(LeetCode)

题目描述

给你一个下标从 0 开始的整数数组 nums 和一个整数 k

一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i + 1, min(n - 1, i + k)] 包含 两个端点的任意位置。

你的目标是到达数组最后一个位置(下标为 n - 1 ),你的 得分 为经过的所有数字之和。

请你返回你能得到的 最大得分

 

示例 1:

输入:nums = [1,-1,-2,4,-7,3], k = 2
输出:7
解释:你可以选择子序列 [1,-1,4,3] (上面加粗的数字),和为 7 。

示例 2:

输入:nums = [10,-5,-2,4,0,3], k = 3
输出:17
解释:你可以选择子序列 [10,4,3] (上面加粗数字),和为 17 。

示例 3:

输入:nums = [1,-5,-20,4,-1,3,-6,-3], k = 2
输出:0

提示:

  • 1 <= nums.length, k <= 105

  • -104 <= nums[i] <= 104

思路

这个题目对现阶段的我来说还是太难了,看大佬题解

灵神题解

1696. 跳跃游戏 VI - 力扣(LeetCode)

代码

C++

class Solution {
public:
    int maxResult(vector<int> &nums, int k) {
        int n = nums.size();
        vector<int> f(n);
        f[0] = nums[0];
        deque<int> q = {0};
        for (int i = 1; i < n; i++) {
            // 1. 出
            if (q.front() < i - k) {
                q.pop_front();
            }
            // 2. 转移
            f[i] = f[q.front()] + nums[i];
            // 3. 入
            while (!q.empty() && f[i] >= f[q.back()]) {
                q.pop_back();
            }
            q.push_back(i);
        }
        return f[n - 1];
    }
};

Java

class Solution {
    public int maxResult(int[] nums, int k) {
        int n = nums.length;
        int[] f = new int[n];
        f[0] = nums[0];
        Deque<Integer> q = new ArrayDeque<>();
        q.add(0);
        for (int i = 1; i < n; i++) {
            // 1. 出
            if (q.peekFirst() < i - k) {
                q.pollFirst();
            }
            // 2. 转移
            f[i] = f[q.peekFirst()] + nums[i];
            // 3. 入
            while (!q.isEmpty() && f[i] >= f[q.peekLast()]) {
                q.pollLast();
            }
            q.add(i);
        }
        return f[n - 1];
    }
}

image-20240205091910319

 

标签:2024.2,27,下标,nums,int,示例,back,寒假,front
From: https://www.cnblogs.com/ysk0904/p/18008747

相关文章

  • 2024牛客寒假算法基础集训营2(小白)
    A.TokitsukazeandBraceletCode:#include<bits/stdc++.h>usingnamespacestd;intmain(){intt;cin>>t;while(t--){inta,b,c,cnt=0;cin>>a>>b>>c;if(a>=150)cnt++;if(a>=200)......
  • 2024牛客寒假算法基础集训营2
    题目链接A.模拟#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;voidsolve(){intn;cin>>n;while(n--){inta,b,c;cin>>a>>b>>c;intans=0;if(a==150)ans+=1......
  • 【转帖】localhost和127.0.0.1的区别
    plantegg.github.io/2023/09/24/localhost和127.0.0.1的区别/背景有人告诉我localhost和127.0.0.1的区别是localhost不经过网卡,把我惊到了,因为我还真不知道这个知识点,于是去特别去验证了一下,这是个错误的理解,localhost会解析成127.0.0.1然后接下来的流程和127.0.0.1一模一......
  • (python)做题记录||2024.2.4||题目是codewars的【 All Balanced Parentheses】
    题目链接:https://www.codewars.com/kata/5426d7a2c2c7784365000783/python我的解决方案:defbalanced_parens(n):#Yourcodehere!used_l=[Falseforiinrange(n)]used_r=[Falseforiinrange(n)]answers=[]defprocess(answer):iflen(a......
  • 寒假day4 2.5
    讲师:钟皓曦,NOI2012Au,from成都七中dp树形dp核心:在树上做的dp给定一棵\(n\)个点的树,求这棵树有几个点。对于树形dp,第一个维度是\(f_i\),代表以\(i\)为根的子树内的信息(有几个点)树形dp的转移方法是把所有儿子信息整合所有儿子的dp值\(\rightarrow\)自己。转移:\(......
  • 寒假生活指导27
    为什么SparkSQL可以自动优化而RDD不可以? Catalyst优化器  流程     ......
  • 2024.1.21 ~ 2024.2.2 集训总结
    集训大纲Week1:图论:拓扑排序、欧拉回路、二分图、最小生成树数据结构:并查集、堆、单调队列week2:图论:连通性数据结构:线段树图论拓扑排序将DAG上的点以关联性进行排序,得到一个有关联的枚举顺序。有了这种特别的枚举顺序,使得在DAG上DP的转移过程更加合理且有......
  • P2767 树的数量
    比上一题更加板。仍然考虑组合类\((T,|\cdot|)\),\(T(x)=\sum_ax^{|a|}\),\(|\cdot|\)为二叉树大小。\(m\)叉树,所以:\[T=x(1+T)^m\]仍然拉反,\([x^n]T=\frac{1}{n}[u^{n-1}](1+u)^{nm}=\frac{\begin{pmatrix}nm\\n-1\end{pmatrix}}{n}\)。直接算即可。#include<......
  • 2024牛客寒假算法基础集训营1 J 又鸟之亦心 题解
    Question2024牛客寒假算法基础集训营1J又鸟之亦心Solution挺好的一个题,给了我很多启发显然,先二分最大值\(D\),关键在于\(check\)怎么写考虑到两个人是相对的,第\(i\)次之后肯定有一个人在\(a_i\),具体是谁不重要,也不需要关注是怎么走过来的,我们需要去维护另外一个人可......
  • 寒假集训总结
    图论拓扑排序定义在一张图上,将所有节点排序,使得每个节点的父节点都在其前面出现。如果图上有环,则这张图没有拓扑序。模版(BFS)booltopo(){queue<int>q;for(inti=1;i<=n;i++)if(!deg[i])q.push(i);while(!q.empty()){cnt++;intu=q.f......