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

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


目录

      • 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.mzph.cn/news/666657.shtml

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

相关文章

理论与实战:一篇看懂Python词云

实现原理 导入一篇txt文档&#xff0c;使用jieba库对文档中的文字进行分词&#xff0c;计算各个词汇出现的频率&#xff0c;使用wordcloud库按照词汇频率的大小生成词云。 注意&#xff0c;不是使用wordcloud.generate()&#xff0c;这个方法没有按照词汇频率的方式实现词云 停…

Linux 驱动开发基础知识——总线设备驱动模型(七)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

Linux常见面试题汇总

Linux上如何查询某个端口是否被占用&#xff1f; 在Linux上&#xff0c;你可以使用以下几种方法来查询某个端口是否被占用&#xff1a; 使用netstat命令&#xff1a; netstat -tuln | grep <端口号>这个命令会列出当前正在运行的所有TCP和UDP端口&#xff0c;并过滤出指…

极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁

文章目录 前言幻兽帕鲁私服详细部署教程查看服务器开始游戏自定义游戏参数配置 前言 行业资讯 《幻兽帕鲁》的火爆对开发商 Pocketpair 来说&#xff0c;代价是巨大的。该游戏的成功让首席执行官沟部拓郎最近在推特上表示&#xff0c;他可能因服务器运营费用而面临破产。据他透…

多线程例子,通过启动三个线程 等三个线程都跑完后打印结果

一个多线程例子&#xff0c;通过启动三个线程 等三个线程都跑完后打印结果 需求描述&#xff1a;开启一个多线程跑3条门店的数据&#xff0c;每个门店都新起一个线程去跑数据&#xff0c;当所有线程跑完后主线程打印结果&#xff0c;记录报错的门店编码 1.线程池配置类 impo…

山西电力市场日前价格预测【2024-02-04】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-02-04&#xff09;山西电力市场全天平均日前电价为367.56元/MWh。其中&#xff0c;最高日前电价为441.08元/MWh&#xff0c;预计出现在18:30。最低日前电价为324.52元/MWh&#xff0c;预计…

代码混淆技术综述与优化方法

摘要 本文介绍了代码混淆的概念和目的&#xff0c;并提供了Python代码混淆的宏观思路。同时&#xff0c;还介绍了一种在线网站混淆Python代码的方法&#xff0c;并给出了混淆前后的示例代码。 引言 在当今信息时代&#xff0c;软件代码的保护显得尤为重要。代码混淆是一种常…

【数位dp】【动态规划】【KMP】1397. 找到所有好字符串

作者推荐 【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数 本文涉及知识点 动态规划汇总 LeetCode1397. 找到所有好字符串 给你两个长度为 n 的字符串 s1 和 s2 &#xff0c;以及一个字符串 evil 。请你返回 好字符串 的数目。 好字符串 的定义为&#x…

蓝桥杯刷题day05——2023

1、题目描述 请求出在12345678 (含) 至 98765432 (含) 中 &#xff0c;有多少个数中完全不包含 2023。 完全不包含 2023是指 无论将这个数的哪些数位移除都不能得到2023。 例如 20322175&#xff0c;33220022 都完全不包含 2023&#xff0c; 而20230415&#xff0c;20193213 …

C#如何实现一个输入框输入,匹配提示数据

在C#中可以使用AutoCompleteStringCollection类来实现输入框的自动完成功能。 首先需要创建一个包含所有候选项的字符串集合&#xff08;List&#xff09;或者从文件、数据库等地方获取到这些候选项。然后将该集合传递给TextBox控件的AutoCompleteCustomSource属性。 下面是一…

装饰你的APP:使用Lottie-Android创建动画效果

装饰你的APP&#xff1a;使用Lottie-Android创建动画效果 1. Lottie-Android简介 Lottie-Android是一个强大的开源库&#xff0c;由Airbnb开发&#xff0c;旨在帮助开发者轻松地在Android应用中添加高质量的动画效果。它基于Adobe After Effects软件中的Bodymovin插件&#x…

STM32的ADC采集传感器的模拟量数据

1、 由于项目上使用传感器采集数据&#xff0c;传感器可以输出模拟电压信号&#xff0c;但是模拟电压信号的输出范围是1-5V&#xff0c;而STM32的ADC采集电压范围是0-3.3V&#xff0c;此时可以用一个简单的分压电路将1-5V的电压将至0.5V到2.5V的范围。 2、电阻分压电路可以使用…

【Simulink系列】——动态系统仿真 之 离散系统线性离散系统

一、离散系统定义 离散系统是指系统的输入与输出仅在离散的时间上取值&#xff0c;而且离散的时间具有相同的时间间隔。满足下列条件&#xff1a; ①系统&#xff08;的输入输出&#xff09;每隔固定时间间隔才更新一次。固定时间间隔称为采样时间。 ②系统的输出依赖当前的…

2023年09月CCF-GESP编程能力等级认证Python编程三级真题解析

Python等级认证GESP(1~6级)全部真题・点这里 一、单选题(共15题,共30分) 第1题 人们所使用的手机上安装的App通常指的是( )。 A:一款操作系统 B:一款应用软件 C:一种通话设备 D:以上都不对 答案:B 第2题 下列流程图的输出结果是( )。 A:60 B:20 C:5 D…

倾斜摄影轻量化,这样才规范!

自然资源部发布了《倾斜数字摄影测量技术规程》等17项行业标准报批稿公示&#xff0c;其中高频出现的倾斜摄影技术&#xff0c;重回大众视野。 倾斜摄影技术是国际测绘领域近些年发展起来的一项高新技术&#xff0c;它颠覆了以往正射影像只能从垂直角度拍摄的局限&#xff0c;通…

栈--数据结构

初始化栈、入栈、出栈 栈&#xff1a;只允许在一端进行插入或删除操作的线性表 栈顶&#xff08;Top&#xff09; 代码 #include <stdio.h>#define MaxSize 50 typedef int ElemType; typedef struct {ElemType data[MaxSize];//数组int top;//始终指向栈顶的一个变量…

SparkStreaming---入门

文章目录 1.SparkStreaming简介1.1 流处理和批处理1.2 实时和离线1.3 SparkStreaming是什么1.4 SparkStreaming架构图 2.背压机制3.DStream案例实操 1.SparkStreaming简介 1.1 流处理和批处理 流处理和批处理是两种不同的数据处理方式&#xff0c;它们在处理数据的方式和特点…

【C++】类和对象之运算符重载(三)

前言&#xff1a;在前面我们知道在类和对象中有六个默认成员函数&#xff0c;并学习了其中三个构造函数、析构函数、拷贝构造函数&#xff0c;今天我们将进一步的学习.赋值运算符重载。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质…

Java并发基础:FutureTask全面解析!

内容概要 FutureTask结合了Future和Runnable接口&#xff0c;它能够异步执行任务&#xff0c;提高程序响应性&#xff0c;可以获取任务执行结果&#xff0c;并且支持任务取消机制&#xff0c;提高了灵活性&#xff0c;同时&#xff0c;它简化了并发编程&#xff0c;使多线程开…

【Linux系统 02】Shell脚本

目录 一、Shell概述 二、输入输出 三、分支控制 1. 表达式 2. if 分支 3. case 分支 四、循环控制 1. for 循环 2. while 循环 3. select 循环 五、函数 一、Shell概述 Shell是Linux系统连接用户和操作系统的外壳程序&#xff0c;将用户的输入和请求选择性传递给操…