LeetCode 每日一题 2024/7/15-2024/7/21

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • 7/15 721. 账户合并
      • 7/16 2956. 找到两个数组中的公共元素
      • 7/17 2959. 关闭分部的可行集合数目
      • 7/18 3112. 访问消失节点的最少时间
      • 7/19 3096. 得到更多分数的最少关卡数目
      • 7/20 2850. 将石头分散到网格图的最少移动次数
      • 7/21 1186. 删除一次得到子数组最大和


7/15 721. 账户合并

根据题目意思 只要两个账号中包含相同的邮箱地址 则认为两个账号可以合并
使用并查集
对每个邮箱创建一个终点邮箱
mailPos: {email:账号位置} 记录所有邮箱对应的账号位置 出现多次对应哪个位置都可以 因为认定为一个账号
rootSet: 存储每个邮箱的终点邮箱 若终点邮箱相同 则代表两个邮箱在同一个账号中
find:
寻找邮箱i的终点邮箱 并返回
union:
寻找邮箱i,j的终点邮箱
若不同
则将i的终点变为j的终点 及将i,j变为同一个账号
遍历已有的账号
将一个账号内的邮箱合并 这里和第一个邮箱合并
结果生成:
遍历所有存在的邮箱
找到其终点邮箱 dic内key为终点邮箱的账号位置 将这个邮箱加入其中
最后加入账号位置上的账号名称

def accountsMerge(accounts):""":type accounts: List[List[str]]:rtype: List[List[str]]"""from collections import defaultdictmailPos = {mail:pos for pos,account in enumerate(accounts) for mail in account[1:]}rootSet = {mail:mail for mail in mailPos}def find(i):while rootSet[i]!=i:rootSet[i] = rootSet[rootSet[i]]i = rootSet[i]return idef union(i,j):if i!=j:endi = find(i)endj = find(j)if endi!=endj:rootSet[endi] = rootSet[j]for account in accounts:l = len(account)for i in range(1,l):email = account[i]union(email,find(account[1]))dic = defaultdict(set)for mail in rootSet:pos = mailPos[find(mail)]dic[pos].add(mail)ans = [[accounts[pos][0]]+sorted(mail) for pos,mail in dic.items()]return ans

7/16 2956. 找到两个数组中的公共元素

遍历两个数组统计
判断元素 是否存在另一个数组中

def findIntersectionValues(nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: List[int]"""s1,s2 = set(nums1),set(nums2)c1,c2 = 0,0for v in nums1:if v in s2:c1+=1for v in nums2:if v in s1:c2+=1return [c1,c2]

7/17 2959. 关闭分部的可行集合数目

用n位二进制来代表当前情况保留节点的状态
枚举保留节点的状态 判断该状态下是否满足要求

def numberOfSets(n, maxDistance, roads):""":type n: int:type maxDistance: int:type roads: List[List[int]]:rtype: int"""g = [[float("inf")]*n for _ in range(n)]for i in range(n):g[i][i]=0for x,y,v in roads:g[x][y]= min(g[x][y],v)g[y][x]= min(g[y][x],v)f = [None]*ndef func(s):for i,r in enumerate(g):if s>>i &1:f[i] = r.copy()for k in range(n):if (s>>k & 1) == 0:continuefor i in range(n):if (s>>i & 1) ==0 or f[i][k]==float("inf"):continuefor j in range(n):f[i][j] = min(f[i][j],f[i][k]+f[k][j])for i,d in enumerate(f):if (s>>i & 1)==0:continuefor j,dd in enumerate(d):if s>>j & 1 and dd>maxDistance:return 0return 1return sum(func(s) for s in range(1<<n))

7/18 3112. 访问消失节点的最少时间

dijkstra
从0开始访问能够访问到的节点
小顶堆h存储(d,x)
d为访问到x节点需要的时间距离
每次取堆内最近能够访问到的节点
遍历该节点连接的其他节点 y
如果能在节点y消失前或者比已知更快到达 则更新节点y的结果

def minimumTime(n, edges, disappear):""":type n: int:type edges: List[List[int]]:type disappear: List[int]:rtype: List[int]"""import heapqg = [[] for _ in range(n)]for x,y,v in edges:g[x].append((y,v))g[y].append((x,v))ans = [-1]*nans[0]=0h = [(0,0)]while h:d,x = heapq.heappop(h)if d>ans[x]:continuefor y,v in g[x]:newd = d+vif newd < disappear[y] and (ans[y]<0 or ans[y]>newd):ans[y]=newdheapq.heappush(h, (newd,y))return ans

7/19 3096. 得到更多分数的最少关卡数目

先求得完成所有关卡的分数total
从头开始记录每一关后得到的分数cur 同时减去cur为剩余的分数
判断当前分数是否大于剩余分数

def minimumLevels(possible):""":type possible: List[int]:rtype: int"""total = 0for v in possible:if v==1:total +=1else:total -=1cur = 0num = 0tag = Falsefor v in possible[:-1]:num+=1if v==1:cur +=1total -=1else:cur -=1total +=1if total<cur:tag = Truebreakreturn num if tag else -1

7/20 2850. 将石头分散到网格图的最少移动次数

使用f记录石头可以移除的位置
使用t记录石头需要进入的位置
全排列f 依次计算每种情况需要的步数

def minimumMoves(grid):""":type grid: List[List[int]]:rtype: int"""import itertoolsf,t = [],[]for i,row in enumerate(grid):for j,cnt in enumerate(row):if cnt>1:f.extend([(i, j)] * (cnt - 1))elif cnt==0:t.append((i,j))ans=float("inf")for ff in itertools.permutations(f):total = 0for (x1,y1),(x2,y2) in zip(ff,t):total += abs(x1-x2)+abs(y1-y2)ans = min(ans,total)return ans

7/21 1186. 删除一次得到子数组最大和

动态规划
dp0[i]表示arr[i]结尾删除0次的最大和
dp1[i]表示arr[i]结尾删除1次的最大和
dp0[i] = max(dp0[i-1],0)+arr[i]
dp1[i] = max(dp1[i-1]+arr[i],dp0[i-1])

def maximumSum(arr):""":type arr: List[int]:rtype: int"""dp0,dp1=arr[0],0ans = dp0for i in range(1,len(arr)):dp1 = max(dp1+arr[i],dp0)dp0 = max(dp0,0)+arr[i]ans = max(ans,max(dp1,dp0))return ans

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

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

相关文章

springboot业务逻辑写在controller层吗

Spring Boot中的业务逻辑不应该直接写在Controller层。‌ 在Spring Boot项目中&#xff0c;‌通常将业务逻辑分为几个层次&#xff0c;‌包括Controller层、‌Service层、‌Mapper层和Entity层。‌ 1.其中&#xff0c;‌Controller层主要负责处理HTTP请求&#xff0c;‌通过注…

CSS 两种盒模型 box-sizing content-box 和 border-box

文章目录 Intro谨记box-sizing 两个不同赋值的效果区别&#xff1f;宽高的数值计算标准盒模型 box-sizing: content-box; box-sizing 属性的全局设置 Intro 先问一句&#xff1a;box-sizing 和它的两个属性值是做什么用的&#xff1f;以前我并不知道它的存在&#xff0c;也做…

集成学习在数学建模中的应用

集成学习在数学建模中的应用 一、集成学习概述&#xff08;一&#xff09;基知&#xff08;二&#xff09;相关术语&#xff08;三&#xff09;集成学习为何能提高性能&#xff1f;&#xff08;四&#xff09;集成学习方法 二、Bagging方法&#xff08;一&#xff09;装袋&…

昇思25天学习打卡营第22天 | DCGAN生成漫画头像

昇思25天学习打卡营第22天 | DCGAN生成漫画头像 文章目录 昇思25天学习打卡营第22天 | DCGAN生成漫画头像DCGAN模型数据集数据下载和超参数创建数据集数据集可视化 搭建网络生成器判别器损失函数和优化器 模型训练总结打卡 DCGAN模型 深度卷积对抗生成网络&#xff08;Depp Co…

python打包exe文件-实现记录

1、使用pyinstaller库 安装库&#xff1a; pip install pyinstaller打包命令标注主入库程序&#xff1a; pyinstaller -F.\程序入口文件.py 出现了一个问题就是我在打包运行之后会出现有一些插件没有被打包。 解决问题&#xff1a; 通过添加--hidden-importcomtypes.strea…

AV1技术学习:Reference Frame System

一、Reference Frames AV1 Codec 允许在其解码的帧缓冲区中最多允许保存 8 帧。对于一个编码帧&#xff0c;可以从解码的帧缓冲区中选择任意 7 个帧作为它的参考帧。编码端可以通过比特流显式地传输参考帧索引&#xff0c;范围从 1到 7。原则上&#xff0c;参考帧索引 1-4 为当…

GeoHash原理介绍以及在redis中的应用

GeoHash将二维信息编码成了一个一维信息。降维后有三个好处&#xff1a; 编码后数据长度变短&#xff0c;利于节省存储。利于使用前缀检索当分割的足够细致,能够快速的对双方距离进行快速查询 GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串。 1…

react开发-配置开发时候@指向SRC目录

这里写目录标题 配置开发时候指向SRC目录VScode编辑器给出提示总体1.配置react的 2.配置Vscode的1.配置react的2,配置VSCode的提示支持 配置开发时候指向SRC目录VScode编辑器给出提示 总体1.配置react的 2.配置Vscode的 1.配置react的 1. 我么需要下载一个webpack的插件 这样…

判断推理1

判断推理 1.定义判断 2.类比推理 3.逻辑判断 4.图形推理 加粗文本 加粗文本

发展产业带动,助力安康振兴

“人间烟火&#xff0c;四时飘香&#xff0c;南北风味&#xff0c;各有所长”在中国的传统文化中&#xff0c;美食与历史也有着千丝万缕的联系。安康蒸面这道美食经过千年的传承&#xff0c;不仅在当地享有盛誉&#xff0c;也在美食界占据了一席之地。 队员们先参观了蒸面的制作…

map/multimap容器及STL案例

1.map概念&#xff1a;map中所有元素都是pair pair中的第一个元素为key&#xff08;键值&#xff09;起到索引作用&#xff0c;第二个为value&#xff08;实值&#xff09; 所有元素都会根据key值自动排序 本质&#xff1a;map/multimap属于关联式容器&#xff0c;底层结构是…

Vue3 reactive原理(一)-代理对象及数组

Proxy 只能拦截对一个对象的基本操作&#xff08;例如读取、设置属性值&#xff09;&#xff0c;而无法拦截复合操作&#xff08;例如&#xff0c;obj.fun(),由两个基本操作组成&#xff0c;1&#xff09;get到fun这个属性&#xff0c;2&#xff09;函数调用&#xff09;。 1 …

C语言 | Leetcode C语言题解之第257题二叉树的所有路径

题目&#xff1a; 题解&#xff1a; char** binaryTreePaths(struct TreeNode* root, int* returnSize) {char** paths (char**)malloc(sizeof(char*) * 1001);*returnSize 0;if (root NULL) {return paths;}struct TreeNode** node_queue (struct TreeNode**)malloc(size…

vue3使用html2canvas

安装 yarn add html2canvas 代码 <template><div class"container" ref"container"><div class"left"><img :src"logo" alt"" class"logo"><h2>Contractors pass/承包商通行证&l…

Mamba-yolo|结合Mamba注意力机制的视觉检测

一、本文介绍 PDF地址&#xff1a;https://arxiv.org/pdf/2405.16605v1 代码地址&#xff1a;GitHub - LeapLabTHU/MLLA: Official repository of MLLA Demystify Mamba in Vision: A Linear AttentionPerspective一文中引入Baseline Mamba&#xff0c;指明Mamba在处理各种高…

网络通讯实验报告

拓扑图 需求 1、通过DHCP服务&#xff0c;给PC4和PC5分配IP地址、网关、掩码、DNS服务器IP地址 2、Client-1要求手工配置IP地址&#xff0c;为192.168.1.1, c 3、telnet客户端可以远程登录telnet服务器进行设备管理&#xff0c;并成功修改telnet服务器的名字为123 &#xff0c…

操作系统——进程与线程(死锁)

1&#xff09;为什么会产生死锁&#xff1f;产生死锁有什么条件&#xff1f; 2&#xff09;有什么办法解决死锁&#xff1f; 一、死锁 死锁:多个程序因竞争资源而造成的一种僵局&#xff08;互相等待对方手里的资源&#xff09;&#xff0c;使得各个进程都被阻塞&#xff0c;…

一篇文章搞懂MySQL的事务与隔离级别

事务 概述 一个事务其实就是一个完整的业务逻辑&#xff0c;是一个最小的工作单元。要么同时成功&#xff0c;要么同时失败&#xff0c;不可再分 假设转账&#xff0c;从A账户向B账户转账10000 A账户的钱减去10000&#xff08;update语句&#xff09; B账户的钱加上10000&…

【HarmonyOS学习】用户文件访问

概述 文件所有者为登录到该终端设备的用户&#xff0c;包括用户私有的图片、视频、音频、文档等。 应用对用户文件的创建、访问、删除等行为&#xff0c;需要提前获取用户授权&#xff0c;或由用户操作完成。 用户文件访问框架 是一套提供给开发者访问和管理用户文件的基础框…

Web开发:属性

属性 介绍全局属性特定元素属性超链接元素 (< a >)图像元素 (< img >)输入元素 (< input >)表单元素 (< form >)表格元素 (< table >) 其他元素段落元素 (< p >)列表元素 (< ul >, < ol >, < li >) 新增的HTML5属性示例…