Leetcode刷题日志3.0

news/2024/11/23 5:37:26/

目录

前言:

1.相对名次​​​​​​

2.学生出勤记录 I 

 3.重塑矩阵

4.分糖果 

5.最长和谐子序列

6.种花问题 


前言:

        今天我就分享一下最近在leetcode刷到的题,希望对大家有所帮助。编程语言:Python3。好了废话不多讲了,请看题:
 

1.相对名次​​​​​​

给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。

运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况:

名次第 1 的运动员获金牌 "Gold Medal" 。
名次第 2 的运动员获银牌 "Silver Medal" 。
名次第 3 的运动员获铜牌 "Bronze Medal" 。
从名次第 4 到第 n 的运动员,只能获得他们的名次编号(即,名次第 x 的运动员获得编号 "x")。
使用长度为 n 的数组 answer 返回获奖,其中 answer[i] 是第 i 位运动员的获奖情况。

class Solution:def findRelativeRanks(self, score):li=["Gold Medal","Silver Medal","Bronze Medal"]for i in range(3,len(score)):li.append(str(i+1))l=[]ss=[]for i in score:ss.append(i)i=0di={}for i in range(len(score)):di[max(score)]=li[i]score.remove(max(score))for j in ss:l.append(di[j])return l

 方法思路:先创建一个储存名次的列表来li,然后向里面依次存入当前已有人数的名次(前三名跟后面的分开处理),然后我们创建一个字典,对当前score分数进行循环,把最大分数值作为字典的键,然后以li中的名次作为值(每次循环一次后,li的值往后移动一位),然后就把当前score中的最大值给移除掉就行了。最后用列表l 来储存字典中的名次,依次输出就行了

2.学生出勤记录 I 

给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:

'A':Absent,缺勤
'L':Late,迟到
'P':Present,到场
如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:

按 总出勤 计,学生缺勤('A')严格 少于两天。
学生 不会 存在 连续 3 天或 连续 3 天以上的迟到('L')记录。
如果学生可以获得出勤奖励,返回 true ;否则,返回 false 。

class Solution:def checkRecord(self, s):return s.count('A')<2 and 'LLL' not in s

 思路方法:可能刚刚开始会有人想复杂了,其实这道题非常简单,一行就可以搞定了,我就不讲了,看代码就懂了。

 3.重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。

给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。

如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

class Solution:def matrixReshape(self, mat, r, c) :li=[]for i in mat:li.extend(i)n=len(li)if c*r>n or c*r<n:return matnewmat=[]for _ in range(r):a=[]for _ in range(c):a.append(li.pop(0))newmat.append(a)return newmat

思路方法:先把这个矩阵里面的数字依次存入到列表li 里,下面就是通过对range(r) 和range(c) 的嵌套循环取出li 里面的数据了(这里是直接去利用队列的出队方法取出数据)

4.分糖果 

Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。

医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。

给你一个长度为 n 的整数数组 candyType ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的 最多 种类数。

class Solution:def distributeCandies(self, candyType) :a=set(candyType)ty=len(a)n=int(len(candyType)/2)if n>=ty:return tyreturn n

思路方法:首先通过集合的方法去重,获取到糖果的种类,然后对当前糖果的数量整除于2,得出的结果就是可以吃到的糖果,然后跟糖果种类数目进行比较,如果大于种类数目就说明可以吃到全部种类数目,反之就返回当前可以吃到的数量(即可以吃到的最多种类数目)

5.最长和谐子序列

和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。

现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。

数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。

class Solution(object):def findLHS(self, nums):di={}li=[]for i in nums:di[i]=di.get(i,0)+1for i in di:if i+1 in di:li.append(di[i]+di[i+1])if li==[]:return 0return max(li)

 思路方法:先是创建一个字典,作为元素数量的统计,然后对序列进行循环统计里面元素的个数存入到字典当中。再然后就是对字典进行循环,获取到字典相差为1的元素个数之和,然后存入到列表li当中,最后列表li里面的数字就是相差为1的元素数目之和,我们只需要返回最大值就行了。

6.种花问题 

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。

class Solution:def canPlaceFlowers(self, flowerbed, n):count=0flowerbed.append(0)flowerbed.insert(0,0)for i in range(1,len(flowerbed)-1):if flowerbed[i]==flowerbed[i-1]==flowerbed[i+1]==0:flowerbed[i]=1count+=1return count>=n

 思路方法:这道题做起来会比较无从下手,因为可能要考虑到这个数组最左边和最右边是否为1的问题,所以我们可以这样子,索性就在这个数组两边加上0,这样子我们就会发现这时候不需要去考虑两边的问题了,只要满足三个连续的0就可以实现种花。

 好了,以上就是今天要分享的题目了,你们学会了吗?

分享一张壁纸:


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

相关文章

作为一名8年测试工程师,因为偷偷接私活被····

接私活 对程序员这个圈子来说是一个既公开又隐私的话题&#xff0c;不说全部&#xff0c;应该大多数程序员都有过想要接私活的想法&#xff0c;当然&#xff0c;也有部分得道成仙的不主张接私活。但是很少有人在公开场合讨论私活的问题&#xff0c;似乎都在避嫌。就跟有人下班后…

【地铁上的设计模式】--创建型模式:单例模式(五)--枚举单例

什么是枚举单例 枚举单例是指使用枚举类型来实现单例模式&#xff0c;它是单例模式中最简单、最安全的一种实现方式。在枚举类型中定义的枚举值只会被实例化一次&#xff0c;即保证了全局唯一的实例&#xff0c;而且实现简单、线程安全、防止反射攻击、支持序列化等。 如何实…

Redis可视化工具-Another Redis Desktop Manager 安装与连接哨兵集群

目录 一、下载安装 1.1 下载 1.2 安装 二、使用 2.1 新建连接 2.2 新增数据 2.3 应用设置 2.3.1深色模式、语言 2.3.2多个连接的颜色标记 一、下载安装 Another Redis DeskTop Manager 是 Redis 可视化管理工具&#xff0c;体积小&#xff0c;完全免费。最重要的是稳定…

从零开始写一个 即时通讯程序

即时通信&#xff08;IM&#xff09;是指能够即时发送和接收互联网消息等的业务。自1998年面世以来&#xff0c;特别是近几年的迅速发展&#xff0c;即时通信的功能日益丰富&#xff0c;逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通信不再是一个单纯的…

(Linux)在Ubuntu系统中添加新用户并授予root权限

向Ubuntu系统中添加新用户并为其授予root权限的步骤如下: 打开终端Terminal 输入命令: sudo su - 以 root 身份登录. 注: sudo su : 切换root身份, 不携带当前用户环境变量 sudo su - : 切换root身份, 携带当前用户环境变量 输入命令: adduser username 向Ubuntu系统中添…

QT QPainter绘制基础图形

QT QPainter绘制基础图形 QPainter介绍绘图显示区实现设置窗体背景颜色参数设置函数实现重绘函数paintEvent实现 主选项区域实现构造函数画笔风格简介画笔笔帽简介画笔连接点简介填充样式简介铺展样式简介画刷风格简介 QPainter介绍 结合实例介绍如何利用QPainter绘制各种图形…

UE4蓝图学习篇(八)-- 角色基础移动

在C学习篇中有介绍如何使用UE4C去处理角色的基础移动&#xff0c;那么本篇介绍使用蓝图去处理角色的基础移动。 1、创建Character类&#xff1b; 添加一个SpringArmComponent组件&#xff0c;在其下方添加一个CameraComponent组件能够看到角色&#xff0c;SpringArmComponent的…

C++设计模式8:组合模式

C++ 23种设计模式系列文章目录 创建型模式 第1式 工厂方法模式 第2式 抽象工厂模式 第3式 单例模式 第4式 建造者模式 第5式 原型模式 结构型模式 第6式 适配器模式 第7式 桥接模式 第8式 组合模式 第9式 装饰器模式