Leetcode - 周赛401

目录

一,3178. 找出 K 秒后拿着球的孩子

二,3179. K 秒后第 N 个元素的值

三,3180. 执行操作可获得的最大总奖励 I

四,3181. 执行操作可获得的最大总奖励 II


一,3178. 找出 K 秒后拿着球的孩子

本题可以直接模拟,遇到 0 或 n - 1 下标,就反转一下。

代码如下:

class Solution {
    public int numberOfChild(int n, int k) {
        int i = 0, t = 1;
        while(k > 0){
            i += t;
            if(i == 0 || i == n-1){
                t *= -1;
            }
            k--;
        }
        return i;
    }
}

二,3179. K 秒后第 N 个元素的值

本题也是一道模拟题,对数组 a 不断的求前缀和,最后返回a[n-1].

代码如下:

class Solution {
    public int valueAfterKSeconds(int n, int k) {
        int MOD = (int)1e9 + 7;
        int[] a = new int[n];
        Arrays.fill(a, 1);
        while(k > 0){
            for(int i=1; i<n; i++){
                a[i] = (a[i] + a[i-1])%MOD;
            }
            k--;
        }
        return a[n-1];
    }
}

三,3180. 执行操作可获得的最大总奖励 I

本题可以使用dfs中的选或不选来做,这里需要知道当前的下标 i ,以及前面所选的数的和 x,需要使用 x < rewardValues[i] 来判断该点能否选。(注意,题目对选择的下标没有进行限制,我们可以先将数组排序,这样就只需要向后遍历)

定义 dfs(i,x):在[0,i)所选择的所有数的和为x时,[i,n]的最大总奖励。

  • 选择 i 下标(必须先满足 x < rewardValues[i]),这时下一个状态就是 dfs(i+1,x+rewardValues[i])
  • 不选 i 下标,下一个状态是 dfs(i+1, x)
  • 结束条件,i == n,返回 0
  • 返回两者的较大值

这里记忆化的时候只需要记录 x 就行,我们只需要关注在当前和为 x 时,能取到的最大值memo[x],代码如下:

class Solution {
    public int maxTotalReward(int[] rewardValues) {
        Arrays.sort(rewardValues);
        memo = new int[4001];
        Arrays.fill(memo, -1);
        return dfs(0,0,rewardValues);
    }
    int[] memo;
    int dfs(int i, int x, int[] rewardValues){
        if(memo[x] != -1) return memo[x];
        if(i == rewardValues.length) return 0;
        int res = dfs(i+1, x, rewardValues);
        if(x < rewardValues[i]){
            res = Math.max(res, dfs(i+1, x+rewardValues[i], rewardValues)+rewardValues[i]);
        }
        return memo[x] = res;
    }
}

递推做法(0-1背包)

定义f[i][j]:能否从前 i 个数得到总奖励为 j

  • 选(满足 j > rewardValues[i] && j-rewardValues[i] < rewardValues[i]),f [ i ][ j ] = f [ i-1 ][ j-rewardValues[i] ]
  • 不选,f [ i ][ j ] = f [ i-1 ][ j ]
  • f [ i ][ j ] = f [ i-1 ][ j ] || f [ i-1 ][ j-rewardValues[i] ]
class Solution {
    public int maxTotalReward(int[] rewardValues) {
        Arrays.sort(rewardValues);
        boolean[] f = new boolean[4001];
        int res  = 0;
        f[0] = true;
        for(int i=0; i<rewardValues.length; i++){
            for(int x=rewardValues[i]-1; x>=0; x--){
                f[x+rewardValues[i]] = f[x+rewardValues[i]] || f[x];
                res = Math.max(res,f[x+rewardValues[i]]?x+rewardValues[i]:res);
            }
        }
        return res;
    }
}

四,3181. 执行操作可获得的最大总奖励 II

该问无法使用上述的做法,还需要进行优化,这里使用的是 bitset优化,它的原理就是直接使用二进制进行上述的或运算,这样就可以优化掉一层for循环。这里二进制位1-表示能得到当前数,0-表示不能得到当前数。代码如下:

//这里使用py是因为更加直接易懂
class Solution:
    def maxTotalReward(self, rewardValues: List[int]) -> int:
        f = 1
        for v in sorted(rewardValues):
            mask = (1 << v) - 1
            # t = (f & mask) << v : 表示如果选择v时,且 x < v 时, x + v 的所有能表示的值
            # f |= t : 为了计算不选择v时,x 的所有能表示的值
            f |= (f & mask) << v
        return f.bit_length() - 1

//Java版
import java.math.BigInteger;

class Solution {
    public int maxTotalReward(int[] rewardValues) {
        BigInteger f = BigInteger.ONE;
        for (int v : Arrays.stream(rewardValues).distinct().sorted().toArray()) {
            BigInteger mask = BigInteger.ONE.shiftLeft(v).subtract(BigInteger.ONE);
            f = f.or(f.and(mask).shiftLeft(v));
        }
        return f.bitLength() - 1;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/728312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小红书官方教程:如何在小红书上打造IP

在小红书这个五彩斑斓的社区里&#xff0c;打造一个成功的IP就像是种下一颗种子&#xff0c;看着它慢慢发芽&#xff0c;开花结果。今天&#xff0c;就让我们来聊聊如何在小红书上打造一个让人眼前一亮的个人品牌。 首先&#xff0c;什么是IP&#xff1f;IP&#xff0c;也就是…

leetCode热题100——两数之和(python)

题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺…

高考志愿服务,一张AI搜索的现实考卷

随着最后一笔落下&#xff0c;承载着高考考生们的知识考卷就此完成。另一张更为复杂的现实考卷——志愿填报&#xff0c;悄然摆在了家长和考生们的面前。 2024是多个省份进入新高考的第一年&#xff0c;新高考为考生带来了更大的选择空间和自由度&#xff0c;一些地区的考生需要…

差分总结(一维+二维)

差分&#xff0c;可以视作前缀和的逆运算。 前缀和用于去求一个区间段的和 差分用于改变一个区间的值&#xff08;比如说某个区间都加上或者减去一个数&#xff09; P2367 语文成绩 #include<bits/stdc.h> using namespace std; #define int long long int n,p; int a…

Linux:多线程中的互斥与同步

多线程 线程互斥互斥锁互斥锁实现的原理封装原生线程库封装互斥锁 死锁避免死锁的四种方法 线程同步条件变量 线程互斥 在多线程中&#xff0c;如果存在有一个全局变量&#xff0c;那么这个全局变量会被所有执行流所共享。但是&#xff0c;资源共享就会存在一种问题&#xff1…

云计算【第一阶段(17)】账号和权限管理

目录 一、用户账号和组账号概述 1.1、用户账号的三种角色 1.2、组账号的两个角色 二、用户账号文件 2.1、/etc/passwd 2.2、/etc/shadow 2.3、chage 命令 三、组账号文件 3.1、/etc/group 3.2、/etc/gshadow 四、添加组账户 4.1、添加删除组成员 4.2、删除组账号 …

【面试干货】throw 和 throws 的区别

【面试干货】throw 和 throws 的区别 1、throw1.1 示例 2、throws2.1 示例 3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;throw和throws都与异常处理紧密相关&#xff0c;但它们在使用和含义上有明显的区别。…

【CS.DS】数据结构 —— 图: 图的相关概念大全

文章目录 1 图的类型2 图的基本术语References 1 图的类型 图是一种数据结构&#xff0c;由节点&#xff08;顶点&#xff09;和边组成。图可以用来表示各种网络结构&#xff0c;如社交网络、交通网络、计算机网络等。根据边的性质&#xff0c;图可以分为以下几种类型&#xf…

Linux系统安装Dify结合内网穿透实现远程访问本地LLM开发平台

文章目录 前言1. Docker部署Dify2. 本地访问Dify3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署大语言模型应用开发平台Dify,并结合cpolar内网穿透工具实现公网环境远程访问…

海外盲盒小程序搭建过程的最大挑战:文化差异与本地化

一、引言 随着全球化的深入发展&#xff0c;跨境电商和海外市场的拓展成为许多企业的重要战略方向。盲盒小程序作为一种新兴的消费模式&#xff0c;也在海外市场展现出巨大的潜力。然而&#xff0c;在海外搭建盲盒小程序并非易事&#xff0c;文化差异与本地化问题是其搭建过程…

计算机毕业设计Python+Spark音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 音乐大数据 大数据毕业设计 大数据毕设

2023届本科生毕业论文&#xff08;设计&#xff09;开题报告 知识图谱音乐推荐系统 学 院&#xff1a; XXX 专 业&#xff1a; XXX 年 级 班 级&#xff1a; XXX 学 生 姓 名&#xff1a; XXX 指 导 教 师&#xff1a; XXX 协助指导教师&#xff1a; …

Vue68-路由简介

一、路由的应用&#xff1a;&#xff08;单页面应用&#xff09; 单页面应用&#xff1a;页面不刷新&#xff0c;但是路径会改变。 二、路由的原理&#xff1a; 2-1、多页面应用&#xff1a; 2-2、路由的相关概念 2-3、前端路由、后端路由 前端路由&#xff1a;你是什么路径…

DDMA信号处理以及数据处理的流程---cfar检测

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

【面试干货】抽象类与接口的区别

【面试干货】抽象类与接口的区别 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程中&#xff0c;抽象类和接口是两个非常重要的概念&#xff0c;它们都为代码的可扩展性和复用性提供了基础。但是&#xff0c;它们之间也有一些明显…

AI发展核心要素之一(算力)

背景&#xff1a; 当今时代&#xff0c;云计算、人工智能、视频会议、短视频和各种社交媒体等行业蓬勃兴起&#xff0c;而ChatGPT-OpenAI的一次又一次的版本更新和迭代更是将我们带入了AI时代的新纪元。在2023年底的华为全联接大会上&#xff0c;孟晚舟就曾在演讲中表示:“算力…

JDBC(简介、入门与IDEA中导入MySQL的驱动)

&#xff08;建议学完 MySQL 的基础部分&#xff09; JDBC——简而言之&#xff1a;用 Java 语言操作数据库。 Java DataBase Connectivity&#xff08;Java 语言连接数据库&#xff09; 目录 一、引言 &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;JDBC 简…

生产实习Day14 ---- 大语言模型(LLM)

文章目录 大语言模型什么是大语言模型&#xff1f;大语言模型的关键技术大语言模型的应用场景大语言模型面临的挑战*大语言模型的未来发展趋势大语言模型的应用前景 大语言模型 什么是大语言模型&#xff1f; 大语言模型是一种基于深度学习的自然语言处理 (NLP) 模型&#xff…

JaveEE进阶----Spring Web MVC入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、什么是 Spring Web MVC&#xff1f;&#xff1f;1.1MVC 定义1.2 什么是Spring MVC ?1.3过浏览器和用户程序交互 二、 RequestMapping 注解三、Postman 前言…

Vue67-Vuex简介

因为vuex是插件&#xff0c;所以&#xff0c;使用的时候&#xff1a;vue.use(插件名) 一、Vuex的意义和使用场景 红色的箭头&#xff0c;都是读数据。 若是&#xff0c;B、C、D都想修改A组件中的x数据&#xff08;写&#xff09;&#xff1a;此时&#xff0c;A组件就是数据的接…

聚合大模型场景助力产业升级,WAIC 2024 容联云论坛即将开幕

前 言 Introduction 2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;简称“WAIC 2024”&#xff09;即将拉开帷幕&#xff0c;在世界人工智能大会组委会办公室的指导下&#xff0c;容联云将于7月6日主办容联云生成式应用与大模型商业化实践论坛。本次论坛还将获…