LeetCode 每日一题 2024/1/29-2024/2/4

news/2024/10/19 1:25:26/

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


目录

      • 1/29 514. 自由之路
      • 1/30 2808. 使循环数组所有元素相等的最少秒数
      • 1/31 2670. 找出不同元素数目差数组
      • 2/1 LCP 24. 数字游戏
      • 2/2 1686. 石子游戏 VI
      • 2/3 1690. 石子游戏 VII
      • 2/4 292. Nim 游戏


1/29 514. 自由之路

key中每一个字符都需要按一次 即m=len(key)
该值固定可以 最后加上即可
假设状态(i,j)为当前ring[i],key[j]
当两值相等时可以变换到(i,j+1)
否则左移 ((i-1+n)%n,j)
右移((i+1)%n,j)
从(0,0) 到(i,m)最短路径即为答案

def findRotateSteps(ring, key):""":type ring: str:type key: str:rtype: int"""n,m=len(ring),len(key)mem = [[False]*(m+1) for _ in range(n)]mem[0][0]=Truel = [(0,0)]step = 0while True:tmp = []for i,j in l:if j==m:return stepif ring[i]==key[j]:if not mem[i][j+1]:mem[i][j+1]=Truetmp.append((i,j+1))continuefor nxt in [(i-1)%n,(i+1)%n]:if not mem[nxt][j]:mem[nxt][j]=Truetmp.append((nxt,j))step+=1

1/30 2808. 使循环数组所有元素相等的最少秒数

可以选择将每一位置的数变为左右两侧的数
对每一个数值x记录其依次出现的位置
如果要将所有数变为x
需要的最少次数为两个x的最远距离除以二

def minimumSeconds(nums):""":type nums: List[int]:rtype: int"""from collections import defaultdictm = defaultdict(list)n = len(nums)ans = nfor i,v in enumerate(nums):m[v].append(i)for pos in m.values():mx = pos[0]+n-pos[-1]for i in range(len(pos)):mx = max(mx,pos[i]-pos[i-1])ans = min(ans,mx//2)return ans

1/31 2670. 找出不同元素数目差数组

从前到后判断有多少不同数目
从后往前同样判断一次

def distinctDifferenceArray(nums):""":type nums: List[int]:rtype: List[int]"""n = len(nums)ans = [0]*nm = {}for i,v in enumerate(nums):m[v]=1ans[i]=len(m)m={}for i in range(n-1,-1,-1):ans[i]-=len(m)m[nums[i]]=1return ans

2/1 LCP 24. 数字游戏

可以看做将nums[j]-j变成相同的数字
使用两个堆来存放数值
low用来存放小的 up用来存放大的
lows,ups分别为数值和
考虑每一个数 保持up中的数个数不多于low

def numsGame(nums):""":type nums: List[int]:rtype: List[int]"""import heapqn=len(nums)ans = [0]*nlow,up=[],[]lows,ups=0,0mod = 10**9+7for i in range(n):x = nums[i]-iif len(low)==0 or -low[0]>=x:lows+=xheapq.heappush(low,-x)if len(low)>len(up)+1:ups -=low[0]heapq.heappush(up,-low[0])lows += heapq.heappop(low)else:ups+=xheapq.heappush(up,x)if len(low)<len(up):lows += up[0]heapq.heappush(low,-up[0])ups -= heapq.heappop(up)if (i+1)%2==0:ans[i] = (ups-lows)%modelse:ans[i]=(ups-lows-low[0])%modreturn ans

2/2 1686. 石子游戏 VI

如果有两个石子i,j
alice价值 ia,ja
bob价值 ib,jb
两种情况 alice取i 或取j
差值为 ia-jb-(ja-ib) = ia+ib -(ja+jb)
如果大于0则alice先选i 优先选 ia+ib大的石头
将石头两个人的价值相加后倒序排列 两人依次选取

def stoneGameVI(aliceValues, bobValues):""":type aliceValues: List[int]:type bobValues: List[int]:rtype: int"""v = [[a+b,a,b] for a,b in zip(aliceValues,bobValues)]v.sort(reverse=True)asum = sum(value[1] for value in v[::2])bsum = sum(value[2] for value in v[1::2])if asum>bsum:return 1elif asum==bsum:return 0else:return -1

2/3 1690. 石子游戏 VII

动态规划
先求出区间[i,i]的最大的得分差值
向外扩展 直至扩展到区间[0,n-1]

def stoneGameVII(stones):""":type stones: List[int]:rtype: int"""n=len(stones)s = [0]*(n+1)dp=[[0]*n for _ in range(n)]for i in range(n):s[i+1] = s[i]+stones[i]for i in range(n-2,-1,-1):for j in range(i+1,n):dp[i][j] = max(s[j+1]-s[i+1]-dp[i+1][j],s[j]-s[i]-dp[i][j-1])return dp[0][n-1]

2/4 292. Nim 游戏

如果是4的倍数 先手必输 先手拿x个 后手拿4-x个 最后必定是后手拿到
否则 先手取若干个将其变成4的倍数 那么对手就变成了先手4的倍数

def canWinNim(n):""":type n: int:rtype: bool"""return n%4!=0


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

相关文章

Linux 文件 fd

C语言文件输入输出接口 c语言有一套向文件输入输出系统&#xff0c;由几个函数实现。 首先是fopen()函数&#xff0c;这个函数的用法如下&#xff1a; 其次是对应的fclose()函数&#xff0c;用法如下&#xff1a; 然后我们需要用fputs()函数进行往文件里面写数据&#xff1a…

【OpenCV人脸检测】写了个智能锁屏小工具!人离开电脑自动锁屏

文章目录 1. 写在前面2. 设计思路3. 人脸检测4. 程序实现 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

Vim工具使用全攻略:从入门到精通

引言 在软件开发的世界里&#xff0c;Vim不仅仅是一个文本编辑器&#xff0c;它是一个让你的编程效率倍增的神器。然而&#xff0c;对于新手来说&#xff0c;Vim的学习曲线似乎有些陡峭。本文将手把手教你如何从Vim的新手逐渐变为高手&#xff0c;深入理解Vim的操作模式&#…

QT中,对于大小端UDP网络发送的demo,帧头帧尾

简单demo: 发送端&#xff1a; #include <QUdpSocket> #include <QtEndian>#pragma pack(1) struct Test {unsigned char t1:1;unsigned char t2:2;unsigned char t3:3;unsigned char t4:2;quint8 a 1;quint16 b 2;quint16 c 3;//double b …

开源软件在企业中的应用:降本增效的利器(AI)

开源软件在企业中的应用&#xff1a;降本增效的利器 引言企业选择开源软件的动因 1. 降低成本2. 灵活性和定制化3. 安全性和可靠性4. 社区支持和生态系统 开源软件的降本增效之道 1. 降低软件许可成本2. 提高IT基础设施效能3. 加强安全性防护4. 利用社区资源提高效率5. 促进创新…

基于python+控制台的车辆信息管理系统

基于python控制台的车辆信息管理系统 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 打印功能菜单、添加车辆信息、删除车辆信息、修改车辆信息、显示车辆信息、退出系统&#xff0c;并且需要接收用户的输入&#xff0c;在根据输入内容调用相应函数实现…

python-分享篇-GUI界面开发-PyQt GUI

文章目录 PyQt GUI编写你的第一个PyQt GUI程序面向对象方式实现PyQt GUI程序在窗口中添加控件信号与槽机制鼠标事件键盘事件 PyQt GUI 编写你的第一个PyQt GUI程序 import sys from PyQt5.QtWidgets import QApplication, QWidget app QApplication(sys.argv) # 创建应用程序…

STM32F407移植OpenHarmony笔记9

继上一篇笔记&#xff0c;已经完成liteos内核的基本功能适配。 今天尝试启动OHOS和XTS兼容性测试。 如何启动OHOS&#xff1f; OHOS系统初始化接口是OHOS_SystemInit(void)&#xff0c;在内核初始化完成后&#xff0c;就能调用。 extern void OHOS_SystemInit(void); OHOS_Sys…