LeetCode 每日一题 2024/3/25-2024/3/31

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


目录

      • 3/25 518. 零钱兑换 II
      • 3/26 2642. 设计可以求最短路径的图类
      • 3/27 2580. 统计将重叠区间合并成组的方案数
      • 3/28 1997. 访问完所有房间的第一天
      • 3/29 2908. 元素和最小的山形三元组 I
      • 3/30 2952. 需要添加的硬币的最小数量
      • 3/31 331. 验证二叉树的前序序列化


3/25 518. 零钱兑换 II

完全背包问题
1.动态规划
前i个面额可以凑出j的方法
dp[i][j] = dp[i-1][j]+dp[i][j-coins[i-1]]
2.压缩 二维变一维
因为可以无限次数使用 所以j无需逆序考虑

def change(amount, coins):""":type amount: int:type coins: List[int]:rtype: int"""n = len(coins)dp = [[0]*(amount+1) for _ in range(n+1)]for i in range(1,n+1):dp[i][0] = 1for i in range(1,n+1):for j in range(1,amount+1):if j - coins[i-1]>=0:dp[i][j] = dp[i-1][j]+dp[i][j-coins[i-1]]else:dp[i][j] = dp[i-1][j]return dp[n][amount]def change2(amount, coins):""":type amount: int:type coins: List[int]:rtype: int"""n = len(coins)dp = [0]*(amount+1)dp[0]=1for i in range(1,n+1):for j in range(coins[i-1],amount+1):dp[j] += dp[j-coins[i-1]]return dp[amount]

3/26 2642. 设计可以求最短路径的图类

m为邻接表 m[x]=(y,v)表示节点x能到达y并且长度为v
dijkstra
dis[x]用来存放开始节点到当前x节点最短距离
堆用来保存当前可达的所有节点 距离短的优先处理

class Graph(object):def __init__(self, n, edges):""":type n: int:type edges: List[List[int]]"""self.m = [[] for _ in range(n)]for x,y,v in edges:self.m[x].append((y,v))def addEdge(self, edge):""":type edge: List[int]:rtype: None"""self.m[edge[0]].append((edge[1],edge[2]))def shortestPath(self, node1, node2):""":type node1: int:type node2: int:rtype: int"""import heapqdis = [float("inf")]*len(self.m)dis[node1] = 0h = [(0,node1)]while h:d,nxt = heapq.heappop(h)if nxt==node2:return dif d > dis[nxt]:continuefor y,v in self.m[nxt]:if d+v < dis[y]:dis[y] = d+vheapq.heappush(h,(dis[y],y))return -1

3/27 2580. 统计将重叠区间合并成组的方案数

按起始位置从小到大排序
记录有多少个单独的区间 num
每个单独区间都可以选择第一组或第二组
所以有2^num种方案

def countWays(ranges):""":type ranges: List[List[int]]:rtype: int"""ranges.sort(key=lambda x:x[0])num = 0prer = -1for l,r in ranges:if l>prer:num +=1prer = max(prer,r)MOD=10**9+7return pow(2,num,MOD)

3/28 1997. 访问完所有房间的第一天

第一次访问i 为奇数必定要返回左侧的nextVisit
只有第二次访问i 才能继续下一步i+1
此时i+1左侧必定都访问了偶数次
定义dp[i]为第一次访问i的时间
dp[i-1]为第一次访问i-1的时间
此时从i-1花一天时间回退到nextVisit[i-1]
nextVisit[i-1]出为奇数次访问 nextVisit[i-1]+1~i-2为偶数次访问
此时相当于nextVisit[i-1]被第一次访问
所以再次到i-1步数为dp[i-1]-dp[nextVisit[i-1]]
再花一天可以到达i
所以dp[i]=dp[i-1]+1+(dp[i-1]-dp[nextVisit[i-1]])+1
dp[i]=2*dp[i-1]-dp[nextVisit[i-1]]+2

def firstDayBeenInAllRooms(nextVisit):""":type nextVisit: List[int]:rtype: int"""n = len(nextVisit)MOD = 10**9+7dp = [0]*nfor i in range(1,n):dp[i] = (2*dp[i-1]-dp[nextVisit[i-1]]+2)%MODreturn dp[-1]

3/29 2908. 元素和最小的山形三元组 I

先从左到右 l[i]记录位置i左侧比它小的最小值
同理从右到左 r[i]记录位置i右侧比它小的最小值
寻找最小和l[i]+r[i]+nums[i]

def minimumSum(nums):""":type nums: List[int]:rtype: int"""n = len(nums)l = [float("inf")]*nr = [float("inf")]*ncur = nums[0]for i in range(1,n):if cur<nums[i]:l[i]=curelse:cur = nums[i]cur = nums[-1]for i in range(n-2,-1,-1):if cur<nums[i]:r[i]=curelse:cur = nums[i]ans = min([l[i]+r[i]+nums[i] for i in range(n)])return ans if ans!=float("inf") else -1

3/30 2952. 需要添加的硬币的最小数量

从小到大排序
假设当前位置为i 目标总和为s 已得到[0,s-1]的情况
如果x=coins[i] <=s
那么可以继续得到区间s~s+x-1之间的情况
如果x>s
那么我们无法得到[s,x-1]之间的数
所以必须添加s进入数组中 得到[s,2s-1] 下一个将考虑2*s的情况

def minimumAddedCoins(coins, target):""":type coins: List[int]:type target: int:rtype: int"""coins.sort()ans = 0s = 1i = 0while s<=target:if i<len(coins) and coins[i]<=s:s += coins[i]i+=1else:s*=2ans+=1return ans

3/31 331. 验证二叉树的前序序列化

1.计算叶节点个数 添加一个数值必定有两个叶节点(包括#)+2,每一个值也必定是一个叶节点(-1) 最终叶节点剩余值为0
2.将节点压入栈中,根据根左右顺序如果压入的是叶节点必定左右为# 及后面两个为# 则可以将这个叶节点取出用#代替 最终stack中只剩一个#

def isValidSerialization(preorder):""":type preorder: str:rtype: bool"""l = preorder.split(",")leaf = 1for i in l:leaf -=1if leaf<0:return Falseif i!="#":leaf+=2return leaf==0def isValidSerialization2(preorder):""":type preorder: str:rtype: bool"""l = preorder.split(",")if len(l)>1 and (l[-1]!="#" or l[-2]!="#"):return Falsestack =[]for i in l:stack.append(i)if len(stack)<2:continuewhile stack[-1]=="#" and stack[-2]=="#":if len(stack)==2 or stack[-3]=="#":return Falsestack.pop()stack.pop()stack.pop()stack.append("#")if len(stack)==1:breakif len(stack)==1 and stack[0]=="#":return Trueelse:return False

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

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

相关文章

【御控物联】JavaScript JSON结构转换(8):数组To数组——多层属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、案例之《JSON数组 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0c;生成新的JS…

Java

1.学生和老师都会有work方法&#xff0c;学生的工作是学习&#xff0c;老师的工作是教书&#xff0c;我利用了一个接口来实现&#xff1b; 2.同时&#xff0c;老师和学生都是人&#xff0c;并且都有姓名&#xff0c;姓名&#xff0c;年龄和身高等特征&#xff0c;我用了一个继承…

http协议补充

7.7实现http请求 class httprequest { public:void Deserialize(std::string content){while (true){auto pos content.find(sep);if (pos std::string::npos){break;}std::string temp content.substr(0, pos);if (temp.empty()){break;}req_header_.push_back(temp);cont…

Redis 服务

任务描述:请采用 redis 服务,实现高并发数据和海量数据的读写。 (1)利用 linux2 搭建 redis cluster 集群,使用端口 7001-7003模拟主节点,7004-7006 模拟从节点,让其他主机可以访问 redis 集群。 [root@linux4 ~]# yum install -y redis policycoreutils-python-utils…

轮播卡片切换实现

背景 如上图&#xff0c;实现一个轮播卡片能力&#xff0c;支持手动滑动&#xff0c;手动拖动&#xff0c;已经点击两端切换按钮。 实现 <template><div class"top-menu"><!-- Swiper --><div v-if"headerMenuList.length > 9" c…

并查集----格子游戏

并查集中最重要的是要搞懂&#xff1a; 不明白的可以拿纸自己先演示一番&#xff0c;find函数不仅能找到他们的祖先数&#xff0c;而且同时也能更新路径的子结点都等于祖先&#xff0c;然后以后寻找时会更加的方便&#xff01;

如何优雅地用latex写算法作业

中文支持 建议直接看这篇dalao的文章&#xff0c;三种方法写的很清楚 LaTex支持中文的三种方式_latex 编译中文-CSDN博客 代码插入 C 文章前面加 \definecolor{mygreen}{rgb}{0,0.6,0} \definecolor{mygray}{rgb}{0.5,0.5,0.5} \definecolor{mymauve}{rgb}{0.58,0,0.82} …

C++学习建议

C是一门强大且广泛应用的编程语言&#xff0c;特别适合系统级开发、高性能应用和游戏引擎等场景。如果你准备深入学习C&#xff0c;以下是一些关键点和学习路径建议&#xff1a; 1. **基础语法**&#xff1a;首先掌握C的基础语法&#xff0c;如变量声明与赋值、数据类型、运算…

蓝桥杯单片机速成4-温度传感器DS18B20

目录 一、电路图 二、底层驱动代码 三、温度读取实现 四、实际使用 一、电路图 二、底层驱动代码 时序是单总线 我们需要修改的地方是单总线内部延时函数&#xff0c;改成 void Delay_OneWire(unsigned int t) { t*12; while(t--); } #ifndef __ONEWIRE_H #defi…

Unity TrailRenderer的基本了解

在Unity中&#xff0c;TrailRenderer组件用于在对象移动时创建轨迹效果。通常用于增强游戏中的动态物体&#xff0c;比如子弹、飞行道具或者角色移动时的拖尾效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class Trail…

动态规划刷题(算法竞赛、蓝桥杯)--合唱队形(线性DP)

1、题目链接&#xff1a;[NOIP2004 提高组] 合唱队形 - 洛谷 #include <bits/stdc.h> using namespace std; int n,ans; int a[105],f[105][2];//f[i][2]中2表示正反两个方向int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}//正方向求最长上升子序列 a[…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架&#xff0c;最终还是要把计算处理的结果写入外部存储&#xff0c;为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

HTTP,Servlet

HTTP 概念&#xff1a;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 HTTP协议特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型的&#xff1a;一次请求对应一次响应 …

【学习笔记】java项目—苍穹外卖day06

文章目录 苍穹外卖-day06课程内容1. HttpClient1.1 介绍1.2 入门案例1.2.1 GET方式请求1.2.2 POST方式请求 2. 微信小程序开发2.1 介绍2.2 准备工作2.3 入门案例2.3.1 小程序目录结构2.3.2 编写和编译小程序2.3.3 发布小程序 3. 微信登录3.1 导入小程序代码3.2 微信登录流程3.3…

工业电脑工控主机维修各种品牌型号人机界面工控屏深圳捷达工控维修

我们的维修流程 在 深圳捷达工控维修&#xff0c;我们确保客户获得尽可能最好的维修服务&#xff0c;我们简化的维修流程证明了我们对卓越的承诺 1&#xff0c;向内的 收到的仪器将登录到我们的系统并分配一个唯一的作业 ID&#xff0c;该 ID 带有条形码以便于跟踪。 2&#xf…

基于Java的车辆出入校预约管理系统设计与实现(论文+源码)_kaic

摘 要 二十一世纪以来我国科技水平得到很大提升&#xff0c;人们对于生活的美好向往更加强烈&#xff0c;而目前的车辆出入校预约管理由于存在管理不规范等缺点&#xff0c;严重影响了校园的安全&#xff0c;因此&#xff0c;需要设计一个车辆出入校预约管理系统对人们出入校园…

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等 功能包含: 成语大全 二十四节气 英语单词 古诗词 近反义词 词语造句 汉语字典 英文缩写 百家姓 范文文库 文件目录:1个数据库 1个系统源码 1个伪静态规则 安装方式:把1.2G的…

跑spark的yarn模式时RM连不上的情况

在linux控制台跑spark on yarn一个测试案例&#xff0c;日志中总显示RM连yarn服务的时候是&#xff1a;0.0.0.0:8032 具体情况如下图&#xff1a; 我问题出现的原因&#xff0c;总结如下&#xff1a; 1.防火墙没关闭&#xff0c;关闭 2.spark-env.sh这个文件的YARN_CONF_DIR…

T1 神奇苹果桶 (25分) - 小米前端笔试编程题解

考试平台&#xff1a; 赛码 题目类型&#xff1a; 20道选择 2道编程题 考试时间&#xff1a; 2024-03-23 &#xff08;两小时&#xff09; 题目描述 小希在森林冒险的时候发现一个神奇的木桶&#xff0c;某些时会凭空出现一些苹果&#xff0c;小希很解地大家分享了这一个神奇…