LeetCode笔记:Weekly Contest 278

本文档总结了LeetCode Weekly Contest 278中的四个题目,涉及数组操作、二进制数组计分、多项式哈希和字符串子串查找。通过实例演示了解暴力检索、计数数组优化和多项式求和的解题技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 题目一

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

1. 解题思路

这一题没啥好说的,直接按照题意暴力检索就行了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def findFinalValue(self, nums: List[int], original: int) -> int:
        nums = set(nums)
        while original in nums:
            original *= 2
        return original

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

2. 题目二

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

1. 解题思路

这一题的思路就是用两个数组分别来保存没有个idx左侧0的总数和右侧1的总数,然后就可以快速地给出答案了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maxScoreIndices(self, nums: List[int]) -> List[int]:
        n = len(nums)
        zeros = [0 for _ in range(n+1)]
        ones = [0 for _ in range(n+1)]
        for i in range(n):
            zeros[i+1] = zeros[i] if nums[i] == 1 else zeros[i] + 1
            ones[n-1-i] = ones[n-i] if nums[n-1-i] == 0 else ones[n-i] + 1
        _max = max(zeros[i] + ones[i] for i in range(n+1))
        return [i for i in range(n+1) if zeros[i] + ones[i] == _max]

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

3. 题目三

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

1. 解题思路

这一题考察的就是一个多项式的求和,貌似教科书上就有标准解法,不过这里稍微做了一个变形,所以得反向递推回去就是了……

2. 代码实现

给出python代码实现如下:

class Solution:
    def subStrHash(self, s: str, power: int, modulo: int, k: int, hashValue: int) -> str:
        p = [1 for _ in range(k)]
        for i in range(k-1):
            p[i+1] = (p[i] * power) % modulo 
        
        n = len(s)
        
        def encode(idx):
            return ord(s[idx]) - ord('a') + 1
        
        res = ""
        hashval = 0
        for i in range(k):
            hashval = (hashval + p[k-1-i] * encode(n-1-i)) % modulo
        if hashval == hashValue:
            res = s[n-k:n]
        for i in range(n-k-1, -1, -1):
            hashval = ((hashval - encode(i+k) * p[-1]) * power + encode(i) + modulo) % modulo
            if hashval == hashValue:
                res = s[i:i+k]
        return res

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

4. 题目四

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

暂时没有啥很好的思路,唉,过年就给自己放个假吧……

有兴趣的读者可以直接看官方解答:

新年快乐!^ - ^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值