LeetCode 每日一题 2024/11/25-2024/12/1

news/2024/12/4 17:30:48/

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


目录

      • 11/25 743. 网络延迟时间
      • 11/26 3206. 交替组 I
      • 11/27 3208. 交替组 II
      • 11/28 3250. 单调数组对的数目 I
      • 11/29 3251. 单调数组对的数目 II
      • 11/30 3232. 判断是否可以赢得数字游戏
      • 12/1 51. N 皇后


11/25 743. 网络延迟时间

BFS 当前节点k 遍历k联通的所有节点to 如果能够更新节点to的时间
那么讲节点to加入队列 后续考虑

def networkDelayTime(times, n, k):""":type times: List[List[int]]:type n: int:type k: int:rtype: int"""from collections import defaultdictcost = {}time = defaultdict(list)for i in range(1,n+1):cost[i] = float('inf')cost[k] = 0for fro,to,t in times:time[fro].append((to,t))l = [k]while l:k = l.pop(0)for to,t in time[k]:if cost[k]+t<cost[to]:l.append(to)cost[to] = cost[k]+tans = max(cost.values())if ans == float('inf'):return -1return ans

11/26 3206. 交替组 I

遍历每个位置i 判断其与i-1 i+1是否不同

def numberOfAlternatingGroups(colors):""":type colors: List[int]:rtype: int"""n=len(colors)ans=0for i in range(n):if colors[i]^colors[(i+1)%n] and colors[i]^colors[(i-1)%n]:ans+=1return ans

11/27 3208. 交替组 II

将k-1个长度的数组接到原数组后
定位起点l 将右侧位置r不断右移 直至colors[r]!=colors[r-1]
找到尽可能长的交替区间[l,r-1]
如果区间内个数大于等于k个
那么可以得到(r-1-l+1)-k+1个交替组
从下一个起点l=r重新开始查找

def numberOfAlternatingGroups(colors, k):""":type colors: List[int]:type k: int:rtype: int"""n=len(colors)colors = colors+colors[:k-1]ans=0l = 0r = 1while l<n:while r<n+k-1 and  colors[r]!=colors[r-1]:r+=1print(l,r)if r-l>=k:ans+=r-l-k+1l=rr+=1return ans

11/28 3250. 单调数组对的数目 I

dp
定义dp[i][j]表示arr1[i]=j时 前i+1个元素组成的单调数组数目
dp[i][v2]=sum(dp[i-1][v1]) 需要v2>=v1 且 nums[i-1]-v1>=nums[i]-v2>=0
v2>=nums[i]-nums[i-1]+v1 => v2>=v1+d d=max(0,nums[i]-nums[i-1])
状态转移 dp[i][j]=dp[i][j-1]+dp[i-1][j-d]

def countOfPairs(nums):""":type nums: List[int]:rtype: int"""MOD=10**9+7n,m=len(nums),max(nums)dp = [[0]*(m+1) for _ in range(n)]for v in range(nums[0]+1):dp[0][v]=1for i in range(1,n):d = max(0,nums[i]-nums[i-1])for j in range(d,nums[i]+1):if j==0:dp[i][j]=dp[i-1][j-d]else:dp[i][j]=(dp[i][j-1]+dp[i-1][j-d])%MODreturn sum(dp[n-1])%MOD

11/29 3251. 单调数组对的数目 II

dp
定义dp[i][j]表示arr1[i]=j时 前i+1个元素组成的单调数组数目
dp[i][v2]=sum(dp[i-1][v1]) 需要v2>=v1 且 nums[i-1]-v1>=nums[i]-v2>=0
v2>=nums[i]-nums[i-1]+v1 => v2>=v1+d d=max(0,nums[i]-nums[i-1])
状态转移 dp[i][j]=dp[i][j-1]+dp[i-1][j-d]

def countOfPairs(nums):""":type nums: List[int]:rtype: int"""MOD=10**9+7n,m=len(nums),max(nums)dp = [[0]*(m+1) for _ in range(n)]for v in range(nums[0]+1):dp[0][v]=1for i in range(1,n):d = max(0,nums[i]-nums[i-1])for j in range(d,nums[i]+1):if j==0:dp[i][j]=dp[i-1][j-d]else:dp[i][j]=(dp[i][j-1]+dp[i-1][j-d])%MODreturn sum(dp[n-1])%MOD

11/30 3232. 判断是否可以赢得数字游戏

除非个位数和两位数的和相同 否则Alice必定获胜


def canAliceWin(nums):""":type nums: List[int]:rtype: bool"""s=sum(nums)one = 0 for num in nums:if num//10==0:one+=numreturn False if 2*one==s else True

12/1 51. N 皇后

1.遍历每一层的位置
确定一个位置后 将后面不能填的位置标记
2.遍历每一层
使用三个set记录已有皇后的位置
列,左到右的斜线,右到左的斜线
y, x+y, x-y
如果当前位置可以放 那么将这三个值放入 并记录当前x层的列位置y
查看下一层x+1
如果已到了最后一层则保存当前其情况
否则将刚才的状态清空 查看下一个位置

def solveNQueens(n):""":type n: int:rtype: List[List[str]]"""import copyres=[]m = [["."]*n for _ in range(n)]def dfs(i,prem):for loc in range(n):tmpm = copy.deepcopy(prem)if tmpm[i][loc]==".":for x in range(loc+1,n):tmpm[i][x]="x"for x in range(i+1,n):tmpm[x][loc]="x"if loc+x-i<n:tmpm[x][loc+x-i]="x"if loc-(x-i)>=0:tmpm[x][loc-(x-i)]="x"tmpm[i][loc]="Q"if i==n-1:res.append(tmpm)else:dfs(i+1,tmpm)dfs(0,m)ret = []for r in res:ans=[]for line in r:st = ""for s in line:if s=='Q':st+='Q'else:st+='.'ans.append(st)ret.append(ans)return retdef solveNQueens2(n):""":type n: int:rtype: List[List[str]]"""col,ltr,rtl = set(),set(),set()ans=[]pos=[]def dfs(y):for x in range(n):if (x not in col) and ((x+y) not in ltr) and ((x-y) not in rtl):col.add(x)ltr.add(x+y)rtl.add(x-y)pos.append(x)if y+1==n:tmp = pos[:]ans.append(tmp)else:dfs(y+1)col.remove(x)ltr.remove(x+y)rtl.remove(x-y)pos.pop()dfs(0)ret=[]for p in ans:tmp=[]for i in p:row = ['.']*nrow[i]='Q'tmp.append(''.join(row))ret.append(tmp)return ret


http://www.ppmy.cn/news/1552338.html

相关文章

蓝桥杯第 23 场 小白入门赛

一、前言 好久没打蓝桥杯官网上的比赛了&#xff0c;回来感受一下&#xff0c;这难度区分度还是挺大的 二、题目总览 三、具体题目 3.1 1. 三体时间【算法赛】 思路 额...签到题 我的代码 // Problem: 1. 三体时间【算法赛】 // Contest: Lanqiao - 第 23 场 小白入门赛 …

android视频播放器之DKVideoPlayer

一个老牌子的播放器了&#xff0c;项目可能已经有些日子没有维护了。但是使用效果还是不错的。支持多种视频格式&#xff0c;及重力感应、调节亮度等多种效果。想来想去&#xff0c;还是记录下来&#xff0c;我会在文章的最后注明github地址&#xff1a; 首先引入依赖&#xff…

【系统架构设计师】真题论文: 论软件开发过程 RUP 及其应用(包括解题思路和素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2018年 试题1)解题思路论文素材参考RUP 概念和特点RUP 的主要阶段真题题目(2018年 试题1) RUP (Rational Unified Process)是 IBM 公司一款软件开发过程产品,它提出了一整套以UML 为基础的开发准则,…

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…

160-两路14位400Msps AD,两路16位400Msps DA FMC子卡模块

一、概述 该板卡可实现2路14bit 400Msps AD 和2路16bit 400Msps DA功能&#xff0c;遵循 VITA 57 标准&#xff0c;板卡可以直接与VME/VXS/AMC/VPX/PCI-E FPGA 载板连接使用&#xff0c;用于模拟信号、中频信号采集&#xff0c;信号发出等应用&#xff0c;是xilinx开发板设计…

Three.js 相机视角的平滑过渡与点击模型切换视角

在 Three.js 中&#xff0c;实现相机视角的平滑过渡和点击模型切换到查看模型视角是一个常见且有用的功能。这种效果不仅能提升用户体验&#xff0c;还能为场景互动添加更多的动态元素。 1. 基本设置 首先&#xff0c;我们需要创建一个基本的 Three.js 场景&#xff0c;包括相…

经典图论之道路与航线

题目 2412: 信息学奥赛一本通T1503-道路和航线 时间限制: 2s 内存限制: 192MB 提交: 37 解决: 16 题目描述 原题来自&#xff1a;USACO 2011 Jan. Gold Farmer John 正在一个新的销售区域对他的牛奶销售方案进行调查。他想把牛奶送到 T 个城镇 &#xff0c;编号为 1 到 T。这些…

springboot/ssm餐厅点餐管理系统Java在线点餐美食论坛系统web美食源码

springboot/ssm餐厅点餐管理系统Java在线点餐美食论坛系统web美食源码 基于springboot(可改ssm)htmlvue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&…