LeetCode第277场周赛

LeetCode第277场周赛

第一题:

元素计数

本题重点在排序,排序后计算中间值的个数即就是答案的结果。本题就是一个签到题,大家应该也都是直接拿捏的吧!

代码:

class Solution:
    def countElements(self, nums: List[int]) -> int:
        nums.sort()
        sum = 0
        for index,i in enumerate(nums):
            if index == 0 or index == len(nums) -1 :
                continue
            if i > nums[0] and i < nums[-1]:
                sum += 1
        return sum

第二题:

按符号重排数组

本题个人认为它的难度不是一个mid难度,应该是要给easy难度,可能本场周赛比较简单,所以就算一个mid吧。

过于简单我就不讲思路了,大家直接看代码即可!

代码:

class Solution:
    def rearrangeArray(self, nums: List[int]) -> List[int]:
        n1 = []
        n2 = []
        n = []
        for i in nums:
            if i>0:
                n1.append(i)
            else:
                n2.append(i)
        for j in range(len(n1)):
            n.append(n1[j])
            n.append(n2[j])
        nums[:] = n
        return nums

第三题:

找出数组中的所有孤独数字

本题首先需要先排序,然后进行遍历判断即可。

代码:

class Solution:
    def findLonely(self, nums: List[int]) -> List[int]:
        if len(nums) == 1:
            return nums
        nums.sort()
        lone = []
        dit = {}
        for i in set(nums):
            dit[i] = 0
        for i in nums:
            dit[i] +=1
        for i in range(len(nums)):
            if i == 0 and dit[nums[i]] == 1  and nums[i+1] - 1 != nums[i] :
                lone.append(nums[i])
            elif i == len(nums) - 1 and dit[nums[i]] == 1 and nums[i-1] + 1 != nums[i]:
                lone.append(nums[i])
            elif i != 0 and i != len(nums) - 1 and nums[i-1] + 1 != nums[i] and nums[i+1] - 1 != nums[i] and dit[nums[i]] == 1:
                lone.append(nums[i])
        return lone

第四题:

基于陈述统计最多好人数

本题也是本场周赛的压轴题,是一个小学思维题,但是我也是被它给拿下哈哈哈,赛后我又看了y总和题解区大佬们的解答我才大概知道怎么去写,才有点思路。本题因为他的范围计算量在力扣要求的范围内,所以它可以直接使用暴力枚举法。本题的最大复杂度是2的n次方乘n的方,而暴力枚举的复杂度则是2的n次方乘n。所以暴力枚举法成立!

参考一个大佬的思路:

在这里插入图片描述

代码:

class Solution:
    def maximumGood(self, statements: List[List[int]]) -> int:
        n = len(statements)
        res = 0
        for i in range(2**n):
            falg = True
            c = 0
            for j in range(n):
                if (i>>j)&1:
                    c += 1
                    for k in range(n):
                        if statements[j][k] != 2 and statements[j][k] != ((i>>k)&1):
                            falg = False
                            break
            if falg == True:
                res = max(res,c)    
        return res

总结:

本次周赛也是我的第二次周赛,因为这次周赛得前三题比较简单,所以我们全部ac,上一次周赛ac出前两道题,也希望能和大家一起进步,祝大家在新的一年ac之路一路长虹!!!加油加油,同时也希望本篇文章对你有所帮助!!!

在这里插入图片描述

  • 27
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁甲小宝同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值