腾讯音乐20220926

腾讯音乐20220926

第一题 01数列 AC

和之前百度的题目很像

给定一个01字符串s,你可以把相邻的两个字符变成“00”或“11”

求最少需要多少次变化可以使所有字符相等

s.length < 1000

solution

数据范围小,暴力求解

class Solution:
    def minOperations(self, s: str) -> int:
        def f(s, ch):
            cnt = 0
            for i in range(len(s) - 1):
                if s[i] != ch:
                    cnt += 1
                    s[i + 1] = ch
                    s[i] = ch
            return cnt if s[-1] == ch else cnt + 1

        return min(f(list(s), "0"), f(list(s), "1"))
print(Solution().minOperations("1001101"))

第二题 子数组 AC

给定一个正整数数组a,以及一个正整数x

要求满足 子数组乘积尾随0个数大于等于x 的子数组个数

结果可能很大,对1e9+7取模

a.length ≤ 100000

0 < x < a.length

solution

首先你要知道尾随0的个数只和 2和5有关

其实就是一个动态规划

class Solution:
    def getSubarrayNum(self, a: List[int], k: int) -> int:
        # 定义dp[i] 为以i结尾的满足题意的子数组数量
        # [5,2,3,50,4],2
        mod = 10 ** 9 + 7

        def get(x, base):
            res = 0
            while x % base == 0:
                res += 1
                x //= base
            return res

        n = len(a)
        dp = [0] * (n + 1)
        pre = [(0, 0)]
        left = 0
        for x in a:
            t1, t2 = pre[-1]
            pre.append((get(x, 2) + t1, get(x, 5) + t2))
        for i in range(1, n + 1):
            dp[i] += dp[i - 1]
            while min(pre[i][1] - pre[left][1], pre[i][0] - pre[left][0]) >= k:
                dp[i] += 1
                left += 1
        # print(dp)
        return sum(dp) % mod

print(Solution().getSubarrayNum([5, 2, 3, 50, 4], 2))

第三题 矩阵 15%

给定一个n x m 的二维矩阵,给定一个x,保证x为偶数

求矩阵中所有的数都在[1,x]之间且所有2 x 2子矩阵的和为偶数的矩阵构造方式

结果可能很大,对1e9+7取模

2 ≤ n, m, x ≤ 1e9

样例 n=m=x=2

有8种方法

全为1,1种放法

全为2,1种放法

两个1两个2,从4个位置选2个位置放1,有6种放法,剩余放2

1 + 1 + 6

solution

这个数据范围属实吓人

我推了很久还是不知道怎么做,等大佬吧

还有一个构造题,秒杀系统,不懂这方面直接跳过了

总结

#腾讯音乐##笔试##23届秋招笔面经##腾讯音乐23秋招笔试好难啊,麻了#
全部评论
第三个 我猜是三维dp
2 回复
分享
发布于 2022-09-26 20:47 江苏
我推的公式是(2^(m+n-1) * (x/2)^(m*n))感觉挺对的,但是也是15%
2 回复
分享
发布于 2022-09-26 20:54 黑龙江
联易融
校招火热招聘中
官网直投
第二题是前缀和+双指针吧。。
1 回复
分享
发布于 2022-09-26 21:25 江苏
为什么只和2和五有关,10,100,4,5这些呢,没太理解。大佬教教😭
点赞 回复
分享
发布于 2022-09-26 20:47 北京
我想的是第一行,第一列和第二行,第一列两个数只有奇偶,奇奇,偶偶,偶奇四种情况,然后dp求出前两行有多少种可能。 从第三行开始,只有第一列可以[1,x]中任意选,后面数奇偶定型了,感觉这样能o(n)出来 还没验证,写不完了
点赞 回复
分享
发布于 2022-09-26 21:03 北京
这跟华为上次的笔试题很像
点赞 回复
分享
发布于 2022-09-26 21:14 广东
第三题这样? (前四格的种数)*(n*m-4)*x 因为前四格确认了接下来每2格的奇偶性,例如: 奇 偶 /n 偶 奇 接下来右加俩格只能是偶奇和奇偶,其他一样,偶偶---〉奇奇和偶偶
点赞 回复
分享
发布于 2022-09-26 21:39 广东
好矩阵过15%, 是n = m 的情况, n!=m 需要求和再/2
点赞 回复
分享
发布于 2022-09-27 15:38 北京
这是算法岗?
点赞 回复
分享
发布于 2022-10-26 12:09 广东

相关推荐

8 10 评论
分享
牛客网
牛客企业服务