Leetcode刷题日志3.0

目录

前言:

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=0
        di={}
        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 mat
        
        newmat=[]
        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 ty
        return n

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

5.最长和谐子序列

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

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

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

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

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

6.种花问题 

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

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

class Solution:
    def canPlaceFlowers(self, flowerbed, n):

        count=0
        flowerbed.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]=1
                count+=1
        return count>=n

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

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

分享一张壁纸:

猜你喜欢

转载自blog.csdn.net/m0_73633088/article/details/130432416