Leetcode每日刷题【中】--Day 6

冲冲冲!!!

1310. 子数组异或查询前缀异或

一开始使用暴力解法直接就超时了。

若平均查询需要执行n/2次,m次查询就是m*n/2,时间复杂度O(m*n),时间复杂度相当的高。

这里是与前缀和相似的解法。

前缀和:有一串数字,需要求从 下标L 到下标R(L<=R)的和。

这里规定和的数组中,零号元素是0.以方便后来进行相减操作。

前缀异或:相同地,将前R个先异或,然后再进行将前面的元素进行异或。类似于前缀和的减前边的数。

# 模板
class Solution:
    def xorQueries(self, arr: List[int], queries: List[List[int]]) -> List[int]:
        Xor = [0,]
        for i in arr:
            Xor.append(Xor[-1]^i)

        ans = []

        for i in queries:
            l, r = i
            ans.append(Xor[r+1]^Xor[l])
        return ans
LCP 07. 传递信息

这是一道离散数学题,邻接矩阵和可达矩阵的应用

**原理:**A是一个邻接矩阵,若An表示点与点之间距离为n的路线的条数。

代码或许有些稚嫩,大佬们一笑而过就行了~

class Solution:
    def numWays(self, n: int, relation: List[List[int]], k: int) -> int:
        matrix = [[0 for i in range(n)] for _ in range(n)]  # 准备建立邻接矩阵			
        for x, y in relation:  # 建立邻接矩阵
            matrix[x][y] = 1
        ans_matrix = copy.deepcopy(matrix)  # 这个用来做矩阵乘法的,先拷贝一个
            
        for _ in range(k-1):  # 由于传递1次本身就是邻接矩阵,所以传递k次只需要乘k-1次
            ans_matrix = self.matrixTimes(ans_matrix, matrix, n)
        
        return ans_matrix[0][-1]
        
    def matrixTimes(self, ans_matrix, matrix, n):
        """
        进行矩阵乘法运算
        """
        M = [[0 for i in range(n)] for _ in range(n)]  # 准备承接结果
        for i in range(n):
            for j in range(n):
                a = 0
                for m in range(n):
                    a += ans_matrix[i][m]*matrix[m][j]
                M[i][j] = a
        return M  # 返回矩阵乘法结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JamePrin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值