LeetCode笔记:Weekly Contest 277

LeetCode笔记:Weekly Contest 277,第1张

LeetCode笔记:Weekly Contest 277

LeetCode笔记:Weekly Contest 277

1. 题目

1. 解题思路2. 代码实现 2. 题目二

1. 解题思路2. 代码实现 3. 题目三

1. 解题思路2. 代码实现 4. 题目四

1. 解题思路2. 代码实现 1. 题目一

给出题目一的试题链接如下:

2148. Count Elements With Strictly Smaller and Greater Elements 1. 解题思路

这一题其实也简单,我们首先将相同的元素进行合并,然后对unique的元素进行排序,然后取中间的元素计算它们的出现次数的总和即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def countElements(self, nums: List[int]) -> int:
        cnt = Counter(nums)
        vals = sorted(cnt.items())
        return 0 if len(vals) <= 2 else sum(x[1] for x in vals[1:-1])

提交代码评测得到:耗时94ms,占用内存14.3MB。

2. 题目二

给出题目二的试题链接如下:

2149. Rearrange Array Elements by Sign 1. 解题思路

这一题我们的思路很暴力,直接把正负元素分别取出来然后重新合并即可。

不过更优雅的方式可以仿照快排用两个指针不断地进行元素排序也可以,不过这里就不这么做了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def rearrangeArray(self, nums: List[int]) -> List[int]:
        pos = [x for x in nums if x > 0]
        neg = [x for x in nums if x < 0]
        n = len(pos)
        res = [0 for _ in range(2*n)]
        for i in range(n):
            res[2*i] = pos[i]
            res[2*i+1] = neg[i]
        return res

提交代码评测得到:耗时1576ms,占用内存45.8MB。

3. 题目三

给出题目三的试题链接如下:

2150. Find All Lonely Numbers in the Array 1. 解题思路

这一题同样我们只需要对原数组进行一个排序之后即可快速地得到我们的答案。

2. 代码实现

给出python代码实现如下:

class Solution:
    def findLonely(self, nums: List[int]) -> List[int]:
        n = len(nums)
        nums = [-2] + sorted(nums) + [10**7]
        res = []
        for i in range(1, n+1):
            if nums[i] - nums[i-1] <= 1 or nums[i+1] - nums[i] <= 1:
                continue
            res.append(nums[i])
        return res

提交代码评测得到:耗时1424ms,占用内存30.3MB。

4. 题目四

给出题目四的试题链接如下:

2151. Maximum Good People based on Statements 1. 解题思路

这题我们的思路就是一个暴力地深度优先遍历,分别考察每一个人说真话和说假话的情况,然后分别进行考察。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maximumGood(self, statements: List[List[int]]) -> int:
        n = len(statements)
        
        def dfs(idx, status):
            if idx >= n:
                return len([x for x in status if x >= 1])
            
            if status[idx] != 1:
                s = deepcopy(status)
                s[idx] = 0
                s1 = dfs(idx+1, s)
            else:
                s1 = 0
                
            def have_conflict(idx):
                return any(statements[idx][i] != 2 and status[i] != 2 and statements[idx][i] != status[i] for i in range(n))
            
            if status[idx] != 0:
                if have_conflict(idx):
                    return s1
                s = deepcopy(status)
                s[idx] = 1
                for i in range(n):
                    if statements[idx][i] != 2:
                        s[i] = statements[idx][i]
                s2 = dfs(idx+1, s)
            else:
                s2 = 0
            return max(s1, s2)
        
        res = dfs(0, [2 for _ in range(n)])
        return res              

提交代码评测得到:耗时2252ms,占用内存14.6MB。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5720366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存