IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode笔记:Biweekly Contest 81 -> 正文阅读

[数据结构与算法]LeetCode笔记:Biweekly Contest 81

1. 题目一

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

1. 解题思路

这一题思路上还是比较直接的,按照题意找出成对的|组成的pair,然后忽略掉其中的*,然后统计位置上的*即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def countAsterisks(self, s: str) -> int:
        res, cnt, bars = 0, 0, 0
        for ch in s:
            if ch == "|":
                if bars % 2 == 0:
                    res += cnt
                cnt = 0
                bars += 1
            elif ch == "*":
                cnt += 1
        return res + cnt

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

2. 题目二

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

1. 解题思路

这一题我的思路就是找到所有的相互之间存在连接的点的集合,然后对于每一个集合内的点,其与其他集合之间的任一点都可以构成一个不连通的点对。

由此,只要能够找出这些互通的点的集合,那么题目就迎刃而解了。

而至于如何去找到这些互通的点的集合,我这边的一个实现思路是通过DSU进行实现,关于DSU的部分,网上应该挺多了,有兴趣的读者也可以参考我之前写的博客【经典算法:并查集(DSU)结构简介】,这里就不过多赘述了。

2. 代码实现

给出python代码实现如下:

class DSU:
    def __init__(self, n):
        self.root = [i for i in range(n)]
        
    def find(self, k):
        if self.root[k] == k:
            return k
        self.root[k] = self.find(self.root[k])
        return self.root[k]
    
    def union(self, a, b):
        x = self.find(a)
        y = self.find(b)
        if x != y:
            self.root[y] = x
        return

class Solution:
    def countPairs(self, n: int, edges: List[List[int]]) -> int:
        dsu = DSU(n)
        for u, v in edges:
            dsu.union(u, v)
        
        cnt = defaultdict(int)
        for i in range(n):
            cnt[dsu.find(i)] += 1  
        
        res = 0
        for u in cnt:
            res += cnt[u] * (n - cnt[u])
        return res // 2

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

3. 题目三

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

1. 解题思路

这一题还是蛮有意思的,考察变换 a ∧ ( a ⊕ x ) a \land (a \oplus x) a(ax),它能够将位上的1修改为0或者1,但是位上的0始终还是0。

因此,只要存在某一个数的某一位上是1,那么我们总能够使得最终的结果在这一位上保持为1;反之,如果某一位上所有的数都为0,那么无论我们怎么取值,都无法令最后的结果中这一位上为1。

综上,我们就可以获得我们最终的答案。

2. 代码实现

给出python的代码实现如下:

class Solution:
    def maximumXOR(self, nums: List[int]) -> int:
        digits = [0 for _ in range(32)]
        for x in nums:
            idx = 0
            while x != 0:
                digits[31-idx] += x % 2
                x = x // 2
                idx += 1
        res = 0
        for d in digits:
            if d > 0:
                res = res * 2 + 1
            else:
                res = res * 2
        return res

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

4. 题目四

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

1. 解题思路

这一题思路上反而比较直接,就是一个动态规划就完事了,这里就不过多展开了,稍微注意一下边界条件就行。

2. 代码实现

给出python代码实现如下:

class Solution:
    def distinctSequences(self, n: int) -> int:
        MOD = 10**9 + 7
        
        @lru_cache(None)
        def gcd(a, b):
            if a < b:
                return gcd(b, a)
            elif b == 0:
                return a
            a, b = b, a%b
            return gcd(a, b)
        
        @lru_cache(None)
        def dp(idx, pre1, pre2):
            if idx >= n:
                return 1
            elif idx == 0:
                return sum(dp(1, i, 0) for i in range(1, 7)) % MOD
            elif idx == 1:
                res = 0
                for i in range(1, 7):
                    if i != pre1 and gcd(i, pre1) == 1:
                        res = (res + dp(idx+1, i, pre1)) % MOD
                return res % MOD
            res = 0
            for i in range(1, 7):
                if i != pre1 and gcd(i, pre1) == 1 and i != pre2:
                    res = (res + dp(idx+1, i, pre1)) % MOD
            return res % MOD
        
        return dp(0, -1, -1)

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

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:19:22  更:2022-06-29 19:21:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:47:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码