LeetCode笔记:Weekly Contest 360

  • LeetCode笔记:Weekly Contest 360
    • 0. 吐槽
    • 1. 题目一
      • 1. 解题思路
      • 2. 代码实现
    • 2. 题目二
      • 1. 解题思路
      • 2. 代码实现
    • 3. 题目三
      • 1. 解题思路
      • 2. 代码实现
    • 4. 题目四
      • 1. 解题思路
      • 2. 代码实现
  • 比赛链接:https://leetcode.com/contest/weekly-contest-360/

0. 吐槽

这次的题目真的是,一言难尽,难倒是不难,就是各种特殊情况,边界条件,得想的很清楚,然后代码写起来就很丑,完全就是一坨一坨的,思路上感觉没啥难度,实现上各种复杂……

然后一看出题的公司,呵,果然又是国内公司,真的是,感觉每次出现这种思路不复杂但是各种边界条件坑的一逼的题目大都是国内公司出的,做完感觉除了浪费时间之外完全学不到东西,鸡肋的一逼……

国内公司这个出题的风格,真的是完全不明白他们出题的目的是什么……

1. 题目一

给出题目一的试题链接如下:

  • 2833. Furthest Point From Origin

1. 解题思路

这一题没啥难度,左右符号的数目相减取绝对值然后加上下划线符号的数目即可得到可行走的最远距离。

2. 代码实现

给出python代码实现如下:

class Solution:def furthestDistanceFromOrigin(self, moves: str) -> int:cnt = Counter(moves)return abs(cnt["L"] - cnt["R"]) + cnt["_"]

提交代码评测得到:耗时31ms,占用内存16.1MB。

2. 题目二

给出题目二的试题链接如下:

  • 2834. Find the Minimum Possible Sum of a Beautiful Array

1. 解题思路

这一题其实和上周的题目2829差不多(LeetCode笔记:Weekly Contest 359),也都是从小的数开始取,然后block与其pair的数,剩下不足的从target开始依次补足即可。

然后,知道取法之后,我们就可以优化一下直接用求和公式给出结果了。

2. 代码实现

给出python代码实现如下:

class Solution:def minimumPossibleSum(self, n: int, target: int) -> int:if n <= target // 2:return n * (n+1) // 2else:m = target // 2return m * (m+1) // 2 + (n-m) * (target+target+n-m-1) // 2

提交代码评测得到:耗时38ms,占用内存16.4MB。

3. 题目三

给出题目三的试题链接如下:

  • 2835. Minimum Operations to Form Subsequence With Target Sum

1. 解题思路

这一题就是一个贪婪算法的思路,我们首先可以对给出的nums进行统计,获得所有 2 n 2^n 2n的个数。

然后,我们将target数用 2 n 2^n 2n的求和表示出来,即将其用二进制表示出来,然后依次看各个位上的数字能否在nums里面找到即可。

而这里说的贪婪算法的思路其实就是我们从小到大依次看target的各个二进制组成:

  1. 如果这个值直接在nums中存在,那么直接取用;
  2. 如果这个值可以用一系列比它的二进制数拼出来,那么就用这些更小的数来拼成这个值;
  3. 如果上述两者都不存在,那么就找到当前nums中比这个值大的最小的数,然后将其拆分到这个值的程度,并更新nums;
  4. 如果nums不存在比这个值大的数,那么返回-1即可。

2. 代码实现

给出python代码实现如下:

class Solution:def minOperations(self, nums: List[int], target: int) -> int:cnt = [0 for _ in range(32)]for num in nums:idx = 0while num != 1:num = num // 2idx += 1cnt[idx] += 1def is_possible(idx):need = 1for i in range(idx, -1, -1):if cnt[i] >= need:return Trueneed -= cnt[i]need *= 2return Falseres = 0idx = 0while target != 0:if target % 2 != 0:if is_possible(idx):need = 1for i in range(idx, -1, -1):if cnt[i] >= need:cnt[i] -= needbreakneed -= cnt[i]cnt[i] = 0need *= 2else:if all(cnt[i] == 0 for i in range(idx+1, 32)):return -1i = idx + 1while cnt[i] == 0:i += 1cnt[i] -= 1for j in range(idx, i):cnt[j] += 1res += 1delta = (target % 2) * pow(2, idx)target = target // 2   idx += 1return res

提交代码评测得到:耗时69ms,占用内存16.5MB。

4. 题目四

给出题目四的试题链接如下:

  • 2836. Maximize Value of Function in a Ball Passing Game

1. 解题思路

这一题其实也不复杂,就是实现上麻烦一点。

本质上来说,这道题就是找到所有完整路径,然后统计一下其中长度为 k k k的所有子路径当中的最大值。

因此,事实上问题就拆分成了两步:

  1. 找到所有的路径;
  2. 在每一条路径当中,计算所有走过 k k k步的遍历长度,亦即所有长度为 k + 1 k+1 k+1的所有子路径。

关于第一个问题,事实上就是一个拓扑序列的问题,显然,这里所有的路径最后都会进入到一个环当中,这里就有两种情况:

  1. 起点不在环当中,也就是先走过一段直线,然后进入到一个环当中;
  2. 起点就在环当中,也就是整条路径就是一个无限循环的圈;

而要找全这两种路径其实也简单,首先对于第一种情况,显然起点不会出现在receiver当中,因此我们对所有receiver当中没出现过的值作为起点分别考察一下即可。

然后,对于第二种情况,我们只要在处理完了第一种情况之后的剩余点当中逐一考察每一个点作为起点的情况遍历其路径即可。

而每一种遍历方法都一样,就是不断地走直到下次出现的点在已走过的路径当中已经出现过即可。

然后,我们考察对于一条给定的路径,如何求所有长度为 k + 1 k+1 k+1的所有子路径。

这个同样不复杂,就是考察以路径上每一个点作为起点时后续连续长度为 k + 1 k+1 k+1的子串,但是这里同样有些特殊情况,因为最后可能会进入到子环当中,因此后面的路径可能就会有循环,因此不够的部分我们需要用环来补充,然后这部分的操作事实上我们可以用环的长度进行求余来快速处理,即我们计算出环需要循环的次数和剩下需要多走的步数,然后直接计算即可。

2. 代码实现

给出python代码实现如下:

class Solution:def getMaxFunctionValue(self, receiver: List[int], k: int) -> int:n = len(receiver)status = [0 for _ in range(n)]def get_max_value(visited, idx):n = len(visited)m = n-idxaccums = [0] + list(accumulate(visited))d = k+1def get_value(i):if i + d <= n:return accums[i+d] - accums[i]r = i+d - na, b = r // m, r % mreturn accums[-1] - accums[i] + a * (accums[-1]-accums[idx]) + accums[idx+b] - accums[idx]res = max(get_value(i) for i in range(n))return resres = 0nxt = set(receiver)inits = [i for i in range(n) if i not in nxt]for i in inits:idx = iseen = set()visited = []while idx not in seen:status[idx] = 1seen.add(idx)visited.append(idx)idx = receiver[idx]res = max(res, get_max_value(visited, visited.index(idx)))for i in range(n):if status[i] == 1:continueidx = iseen = set()visited = []while idx not in seen:status[idx] = 1seen.add(idx)visited.append(idx)idx = receiver[idx]res = max(res, get_max_value(visited, visited.index(idx)))return res  

提交代码评测得到:耗时581ms,占用内存38.4MB。

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

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

相关文章

C++学习记录——이십팔 C++11(4)

文章目录 包装器1、functional2、绑定 这一篇比较简短&#xff0c;只是因为后要写异常和智能指针&#xff0c;所以就把它单独放在了一篇博客&#xff0c;后面新开几篇博客来写异常和智能指针 包装器 1、functional 包装器是一个类模板&#xff0c;对可调用对象类型进行再封装…

江西抚州新能源汽车3d扫描零部件逆向抄数测量改装-CASAIM中科广电

汽车改装除了在外观方面越来越受到消费者的青睐&#xff0c;在性能和实用性提升上面的需求也是日趋增多&#xff0c;能快速有效地对客户指定汽车零部件进行一个改装&#xff0c;是每一个汽车改装企业和工程师的追求&#xff0c;也是未来消费者个性化差异化的要求。下面CASAIM中…

Fei-Fei Li-Lecture 16:3D Vision 【斯坦福大学李飞飞CV课程第16讲:3D Vision】

目录 P1 2D Detection and Segmentation​编辑 P2 Video 2D time series P3 Focus on Two Problems P4 Many more topics in 3D Vision P5-10 Multi-View CNN P11 Experiments – Classification & Retrieval P12 3D Shape Representations P13--17 3D Shape Rep…

好用的可视化大屏适配方案

1、scale方案 优点&#xff1a;使用scale适配是最快且有效的&#xff08;等比缩放&#xff09; 缺点&#xff1a; 等比缩放时&#xff0c;项目的上下或者左右是肯定会有留白的 实现步骤 <div className"screen-wrapper"><div className"screen"…

同源策略以及SpringBoot的常见跨域配置

先说明一个坑。在跨域的情况下&#xff0c;浏览器针对复杂请求&#xff0c;会发起预检OPTIONS请求。如果服务端对OPTIONS进行拦截&#xff0c;并返回非200的http状态码。浏览器一律提示为cors error。 一、了解跨域 1.1 同源策略 浏览器的同源策略&#xff08;Same-Origin Po…

06.sqlite3学习——DQL(数据查询)(全)

目录 SQLite——DQL&#xff08;数据查询&#xff09; 数据集 select语句 条件查询 比较 确定范围 确定集合 like 查询记录 查询不重复的记录 排序和限制 排序 限制 聚合 聚合函数 语法 SQLite Group By详解 语法 实例 SQLite Having 子句 语法 实例 多…

[JavaWeb]【十一】web后端开发-SpringBootWeb案例(登录)

目录 一、登录功能 1.1 思路 1.2 LoginController 1.3 EmpService 1.4 EmpServiceImpl 1.5 EmpMapper 1.6 启动服务-测试 1.7 前后端联调 二、登录校验&#xff08;重点&#xff09; 2.1 问题 2.2 问题分析 2.3 登录校验​编辑 2.4 会话技术 2.4.1 会话技术 2.4.2 …

QT使用QXlsx实现Excel图片与图表操作 QT基础入门【Excel的操作】

构建图表数据 /// 构建图表数据for (int i = 1; i < 10; ++i) {mxlsx.write(i, 1, i * i * i); // A1:A9mxlsx.write(i, 2, i * i); // B1:B9mxlsx.write(i, 3, i * i - 1); // C1:C9} 需要包含头文件 #include "xlsxchart.h" 1. 饼状图 Chart *pieChart = mxlsx.…

hive可以删除单条数据吗

参考&#xff1a; hive只操作几条数据特别慢 hive可以删除单条数据吗_柳随风的技术博客_51CTO博客

SpringBoot权限认证

SpringBoot的安全 常用框架&#xff1a;Shrio,SpringSecurity 两个功能&#xff1a; Authentication 认证Authorization 授权 权限&#xff1a; 功能权限访问权限菜单权限 原来用拦截器、过滤器来做&#xff0c;代码较多。现在用框架。 SpringSecurity 只要引入就可以使…

2023年6月GESP C++ 三级试卷解析

2023年6月GESP C 三级试卷解析 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 1.高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在计算机上运行的可执行代码。 A.编辑 B.保存 C.调试 D.编译 【答案】D 【考纲知识点…

FPGA GTX全网最细讲解,aurora 8b/10b协议,OV5640板对板视频传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、GTX 全网最细解读GTX 基本结构GTX 发送和接收处理流程GTX 的参考时钟GTX 发送接口GTX 接收接口GTX IP核调用和使用 4、设计思路框架视频源选择OV5640摄像头配置及采集动态彩条视频数据组包GTX aurora 8b/10b数据对…

最新域名和子域名信息收集技术

域名信息收集 1&#xff0e;WHOIS查询 WHOIS是一个标准的互联网协议&#xff0c;可用于收集网络注册信息、注册域名﹑IP地址等信息。简单来说&#xff0c;WHOIS就是一个用于查询域名是否已被注册及注册域名详细信息的数据库&#xff08;如域名所有人、域名注册商&#xff09;…

什么是MVC模式?描述每个组件的作用?解释关系型数据库和非关系型数据库的区别?

1、什么是MVC模式&#xff1f;描述每个组件的作用。 MVC模式&#xff08;Model-View-Controller&#xff09;是一种常见的软件设计模式&#xff0c;用于将应用程序的逻辑、用户界面和数据分离为三个组件。 MVC模式中的三个组件如下&#xff1a; Model&#xff08;模型&#…

pytorch下的scatter、sparse安装

知道自己下载的torch配置 import torch print(torch.__version__) print(torch.version.cuda)进入网站&#xff0c;选择自己配置 https://pytorch-geometric.com/whl/下载相应的包 安装 pip install ******.whl

【音视频】 视频的播放和暂停,当播放到末尾时触发 ended 事件,循环播放,播放速度

video 也可以 播放 MP3 音频&#xff0c;当不想让 视频显示出来的话&#xff0c;可以 给 video 设置宽和高 1rpx &#xff0c;不可以隐藏 <template><view class"form2box"><u-navbar leftClick"leftClick"><view slot"left&q…

Qt 查找文件夹下指定类型的文件及删除特定文件

一 查找文件 bool MyXML::findFolderFileNames() {//指定文件夹名QDir dir("xml");if(!dir.exists()){qDebug()<<"folder does not exist!";return false;}//指定文件后缀名&#xff0c;可指定多种类型QStringList filter("*.xml");//指定…

Uniapp笔记(八)初识微信小程序

一、微信小程序基本介绍 1、什么是微信小程序 微信小程序简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用 小程序是一种新的开放能力&#…

04_21 slab分配器 分配对象实战

目的 ( slab块分配器分配内存)&#xff0c;编写个内核模块&#xff0c;创建名称为 “mycaches"的slab描述符&#xff0c;小为40字节, align为8字节&#xff0c; flags为0。 从这个slab描述符中分配个空闲对象。 代码大概 内核模块中 #include <linux/version.h>…

深度学习模型数值稳定性——梯度衰减和梯度爆炸的说明

文章目录 0. 前言1. 为什么会出现梯度衰减和梯度爆炸&#xff1f;2. 如何提高数值稳定性&#xff1f;2.1 随机初始化模型参数2.2 梯度裁剪&#xff08;Gradient Clipping&#xff09;2.3 正则化2.4 Batch Normalization2.5 LSTM&#xff1f;Short Cut&#xff01; 0. 前言 按照…