Leetcode---360周赛

题目列表

2833. 距离原点最远的点

2834. 找出美丽数组的最小和

2835. 使子序列的和等于目标的最少操作次数

2836. 在传球游戏中最大化函数值

一、距离原点最远的点

 这题主要是理解题意,遇到'L'往左走,遇到'R'往右走,遇到'_'左右都可以走,题目问移动完成后,距离原点的最长距离,这很显然,只有所有的‘_’都往一个方向走的时候,才是最大的

代码如下

class Solution {
public:int furthestDistanceFromOrigin(string moves) {int ret=0,l=0;for(int i=0;i<moves.size();i++){if(moves[i]=='L') l++;else if(moves[i]=='R') l--;else ret++;}ret+=abs(l);return ret;}
};

二、找出美丽数组的最小和

这题和359周赛的第二题一样,就不再写了,贴个代码

class Solution {
public:long long minimumPossibleSum(int n, int target) {long long m=min(target/2,n);return m*(m+1)/2+(target+target+(n-m-1))*(n-m)/2;}
};

三、使子序列的和等于目标的最小操作次数

这题思路在于,题目给的数组存放的是2的幂,我们要想到数的二进制表示,从而想到用nums中的数据来凑出target的每一个二进制位上的1。

而target的每一个二进制上的1,有三个来源:

1.数组本身就有

2.用<2^i的数凑出一个2^i

3.将大于2^i的数拆分成我们需要的2^i

而题目要求我们返回最少的操作次数,那么我们肯定优先前两个方案,尽量避免拆分,所以我们将nums数组排序,并且从低位开始枚举target的二进制位上的1

方案一和方案二可以合并成:用<=2^i的数字凑出2^i

首先我们明确<=2^i的各个数字之和一定>=2^i才有可能凑出2^i,接下来,我们用数学归纳法进行证明用<=2^i的数子之和>=2^i的这些数一定能凑出2^i,s代表<=2^i的数字之和

当i=1,s>=2时,用<=2的数凑出2

1)如果存在2,很显然直接得到2

2)如果不存在2,那么<2^1的数字只能是1,而1相加很显然能得到2^1

所以,<=2^1的数字之和>=2^1的这些数一定能凑出2^1

当i=2,s>=4时,用<=4的数凑出4

1)如果存在4,显然能得到4

2)如果不存在4,<4的数字只能是1/2,即<=2^1,且s>=4>=2,所以根据上面的结论,得到一个2,剩下s-2>=2,同理,还能得到一个2,两个2相加得到4

所以,<=2^2的数字之和>=2^2的这些数一定能凑出2^2

当i=3,s>=8时,用<=8的数凑出8

1)如果存在8,显然能得到8

2)如果不存在8,<8的数字只能是1/2/4,即<=2^2,且s>=8>=4,所以根据上面的结论,得到一个4,剩下s-4>=4,同理,还能得到一个4,两个4相加得到8

所以,<=2^3的数字之和>=2^3的这些数一定能凑出2^3

综上所诉,一直这样推到下去就会得到:用<=2^i的数子之和>=2^i的这些数一定能凑出2^i

方案三:根据题目要求,我们选择数组中离2^i最近的2^j (j>i) 进行拆分,这样操作次数最少,而我们很容易知道,一旦差分了2^j,那么2^(i+1),2^(i+2),...,2^(j-1)就都不用考虑了,因为在拆分2^j时,已经得到了这些数,拆分的次数为 j-i (可以找个例子看看)

那么这题什么时候返回-1,我们知道任何一个2的幂都能被拆成1,所以只有数组之和小于target时,才会返回-1

技巧:当我们在凑出2^i之后,原本的算法应该是需要减去2^i,再去看剩下的数能不能凑出下一个2^i,但是我们也可以只加不减,只要我们在比较时,连同target的二进制i位之前的位数一起比较

代码如下

class Solution {
public:int minOperations(vector<int>& nums, int target) {//返回-1的情况if(accumulate(nums.begin(),nums.end(),0LL)<target)return -1;//记录每一位二级制1的个数long long cnt[32]={0};for(auto&x:nums)cnt[__builtin_ctz(x)]++;//__builtin_ctz得到最右边二进制位1的位数int i=0,ret=0;long long sum=0;while(target>=(1u<<i)){sum+=cnt[i]<<i;int mask=(1u<<(i+1))-1;//小技巧if(sum>=(mask&target)){//能凑出来i++;continue;}//需要拆分i++,ret++;while(cnt[i]==0)i++,ret++;}return ret;}
};

四、在传球游戏中最大化函数值

 这题题目看起来很复杂,但是其实就是让你求传k次球之后得到的最大下标和,如果直接暴力,这题的数据范围肯定会超时,所以这题就是让我们优化时间复杂度,

这里要提到一个倍增的算法思想,本质就是预处理记录每个球员传2^i次球后的得分和接到球的人的下标(这里用x^i都无所谓,只是2^i比较好计算),根据数据范围可以知道,这样每个人的求解时间都在O(logk)以内,时间复杂度为O(nlogk)

代码如下

class Solution {
public:long long getMaxFunctionValue(vector<int>& receiver, long long k) {int n=receiver.size();int m=64 - __builtin_clzll(k);//k的二进制长度int g[n][m+1];//记录2^i后的接球人的下标long long f[n][m+1];//记录2^i后得到的下标和for(int i=0;i<n;i++)//初始化f[i][0]=g[i][0]=receiver[i];//预处理for(int i=1;i<m+1;i++){for(int j=0;j<n;j++){g[j][i]=g[g[j][i-1]][i-1];f[j][i]=f[j][i-1]+f[g[j][i-1]][i-1];}}long long ans=0;for(int i=0;i<n;i++){long long res=i;for(int j=0,node=i;j<m+1;j++){if((k>>j)&1){res+=f[node][j];node=g[node][j];}  }ans=max(ans,res);}return ans;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 集成 Canal 实现监听MySQL表数据

SpringBoot 集成 Canal 准备工作什么是 CanalCanal 在 Spring Boot 中的作用和优势准备工作安装和配置 MySQL 数据库 安装Canal项目集成导入依赖添加配置信息创建监听类测试 准备工作 什么是 Canal Canal 是阿里巴巴开源的基于数据库增量日志解析的数据同步和订阅组件&#x…

关于两个不同数据库的两张表建立数据库链接,关联查询数据

一、数据库链接 数据库链接&#xff08;database link&#xff09;是用于跨不同数据库之间进行连接和数据传输的工具或方法。它允许在一个数据库中访问另一个数据库中的对象和数据。 二、具体操作 以Oracle数据库为例 --1.建立链接tjpt CREATE DATABASE LINK tjpt CONNECT…

知识图谱笔记:TransE

1 知识图谱介绍 一条知识图谱可以表示为一个三元组(sub,rel,obj)。 举个例子&#xff1a;小明的爸爸是大明&#xff0c;表示成三元组是&#xff08;小明&#xff0c;爸爸&#xff0c;大明&#xff09;。前者是主体&#xff0c;中间是关系&#xff0c;后者是客体。主体和客体统…

基于JavaScript粒子流动效果

这是一个HTML文件&#xff0c;主要包含了一些CSS样式和JavaScript代码&#xff0c;用于创建一个动画效果。 在CSS部分&#xff0c;定义了一些基本的样式&#xff0c;包括页面的背景颜色、位置、大小等。特别的&#xff0c;定义了两种球形元素&#xff08;.ball_A 和 .ball_B&am…

MySql学习笔记08——事务介绍

事务 基本概念 事务是一个完整的业务逻辑&#xff0c;是一个最小的工作单元&#xff0c;不可再分。 一个完整的业务逻辑包括一系列的操作&#xff0c;这些操作是整个业务逻辑中的最小单元&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败。 由于只有DML语句中才会…

【综述+3D】基于NeRF的三维视觉2023年度进展报告(截止2023.06.10)

论文&#xff1a;2003.Representing Scenes as Neural Radiance Fields for View Synthesis 官方网站&#xff1a;https://www.matthewtancik.com/nerf 突破性后续改进&#xff1a; Instant Neural Graphics Primitives with a Multiresolution Hash Encoding | 展示官网&#…

Linux:ansible-playbook配置文件(剧本)

如果你还没有配置基础的ansible和一些基础用法可以去下面的链接 playbook是基于ansible的 Linux&#xff1a;ansible自动化运维工具_鲍海超-GNUBHCkalitarro的博客-CSDN博客 Linux&#xff1a;ansible自动化运维工具_鲍海超-GNUBHCkalitarro的博客-CSDN博客 Linux&…

指针进阶(1)

指针进阶 朋友们&#xff0c;好久不见&#xff0c;这次追秋给大家带来的是内容丰富精彩的指针知识的拓展内容&#xff0c;喜欢的朋友们三连走一波&#xff01;&#xff01;&#xff01; 字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* &#xff1b; 使用方法如…

【多线程案例】单例模式(懒汉模式和饿汉模式)

文章目录 1. 什么是单例模式&#xff1f;2. 立即加载/“饿汉模式”3. 延时加载/“懒汉模式”3.1 第一版3.2 第二版3.3 第三版3.4 第四版 1. 什么是单例模式&#xff1f; 提起单例模式&#xff0c;就必须介绍设计模式&#xff0c;而设计模式就是在软件设计中&#xff0c;针对特殊…

Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法

不论搭建什么工程&#xff0c;运行什么文件&#xff0c;只要在Pycharm中出现ImportError: DLL load failed: 找不到指定的模块这样的问题&#xff0c;以下方法都适用&#xff01;&#xff01;&#xff01; 一、问题描述 我在使用pycharm连接webots&#xff0c;用python控制机…

OB Cloud助力泡泡玛特打造新一代分布式抽盒机系统

作为中国潮玩行业的领先者&#xff0c;泡泡玛特凭借 MOLLY、DIMOO、SKULLPANDA 等爆款 IP&#xff0c;以及线上线下全渠道营销收获了千万年轻人的喜爱&#xff0c;会员数达到 2600 多万。2022 年&#xff0c;泡泡玛特实现 46.2 亿元营收&#xff0c;其中线上渠道营收占比 41.8%…

Vue中过滤器如何使用?

过滤器是对即将显示的数据做进⼀步的筛选处理&#xff0c;然后进⾏显示&#xff0c;值得注意的是过滤器并没有改变原来 的数据&#xff0c;只是在原数据的基础上产⽣新的数据。过滤器分全局过滤器和本地过滤器&#xff08;局部过滤器&#xff09;。 目录 全局过滤器 本地过滤器…

将虚拟机网络适配器改为仅主机模式,Vmware弹出“仅主机模式适配器驱动程序似乎未运行

这个问题的原因是&#xff0c;主机上缺乏VMware安装后没有VMnet1和VMnet8网卡。 所以

Springboot 实践(13)spring boot 整合RabbitMq

前文讲解了RabbitMQ的下载和安装&#xff0c;此文讲解springboot整合RabbitMq实现消息的发送和消费。 1、创建web project项目&#xff0c;名称为“SpringbootAction-RabbitMQ” 2、修改pom.xml文件&#xff0c;添加amqp使用jar包 <!-- RabbitMQ --> <dependency&g…

EXCEL 中find,if and,if or

接上一篇sql中find函数的作用&#xff0c;由于工作需求是用帆软做报表&#xff0c;他的一些代码不仅有js&#xff0c;sql中的还有一些excel的相关知识&#xff0c;故作整理。 FIND() excel中的find原理和sql中相似&#xff0c;具体可查看 SQL函数 $FIND_Yangshiwei....的博客…

Python,如何安装lap,pip安装lap出现问题

Linux可以&#xff1a; pip install cpython pip install gitgit://github.com/gatagat/lap.gitwindows可以&#xff1a; 下载https://github.com/gatagat/lap 后解压&#xff0c; 安装pip install cpython 安装VS2019企业版&#xff1a; key BF8Y8-GN2QH-T84XB-QVY3B-RC4D…

自动化测试

1. 什么是自动化 1.1 自动化概念 自动化就是解放测试人员双手&#xff0c;测试工作由代码代替人工执行测试工作。 自动化不能完全代替手工测试。 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或系统&#xff0c;预设条件包括正常和异常&#xff0c;最…

CSS3常用的新功能总结

CSS3常用的新功能包括圆角、阴渐变、2D变换、3D旋转、动画、viewpor和媒体查询。 圆角、阴影 border-redius 对一个元素实现圆角效果&#xff0c;是通过border-redius完成的。属性为两种方式&#xff1a; 一个属性值&#xff0c;表示设置所有四个角的半径为相同值&#xff…

免费SSL/TLS域名证书Certbot配置详细过程

文章目录 1. 在服务器上安装 Certbot2. 停止 web 服务器3. 运行 certbot 命令4. 证书生成位置5. 配置 web 服务器6. 重新加载 web 服务器7. 验证8. 配置自动续期发现问题1. Problem binding to port 80: Could not bind to IPv4 or IPv6.2. live directory exists for example.…

Clion 使用ffmpeg 学习1 开发环境配置

Clion 使用ffmpeg 学习1 开发环境配置 一、准备工作1. 准备环境2. 下载FFmpeg 二、操作步骤1. Clion 新建一个C项目2. 修改 CMakeLists.txt3. 修改配置4. 运行测试5. 打印rtsp 流信息的 demo 一、准备工作 在视频处理和多媒体应用程序开发中&#xff0c;FFmpeg 是一个强大的开…