9.14 小米算法方向笔试(数组去除+卷积和互相关)

求点赞!我第二题没AC,也没找到哪里出了bug,欢迎讨论!
第一题:数组去数
给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要修改数组以供接下来的操作使用。
如果可以将 x 恰好 减到 0 ,返回 最小操作数 ;否则,返回 -1 。
输入:包含3行
第一行,数组nums(输入的格式和 python 的列表相同,例如 [1, 2, 3, 4]。用 python 的 eval() 函数可以直接读入为列表
第二行,数组nums的大小
第三行,给定的正整数x
输出:
输出最小操作数
解法:阅读题意,发现并不需要实际去操作数组(不要题干里这句话误导到:“需要修改数组以供接下来的操作使用)。只需要在左端和右端分别找一些数,使它们的和等于 x ,找到数字的数量最少的一个方案即可。因此这题类似于固定sum的滑动窗口问题。
先从右边开始遍历。每遍历到一个数,把它的后缀和,以及后缀长度存在字典 right_sum 里,直到后缀和大于 x 为止。
然后从左边遍历数组。同样是记录前缀和 s,然后在 right_sum 里寻找 x - s。每找到一次,说明前 i + 1 个数和后面 right_sum[x-s] 个数之和为 x,可以更新一次最终答案。注意:数字的总个数必须小于 n,否则不是可行方案。
如果没有找到任何和为 x 的方案,输出-1。
nums = eval(input())
n = int(input())
x = int(input())
right_sum = {}
s = 0
for i in range(n):
    s += nums[- i - 1]
    right_sum[s] = i + 1
    if s > x:
        break
ans = float('inf')
s = 0
for i in range(n):
    s += nums[i]
    if right_sum.get(x - s) != None:
        t = right_sum.get(x - s) + i + 1
        if t <= n:
            ans = min(t, ans)
print(ans if ans < float('inf') else -1)
第二题:实现卷积和互相关计算(通过83%)
给定两个信号 x(n) 和 h(n),卷积和互相关定义如下:
卷积:

互相关:

给定两个信号 x 和 n,分别输出它们的卷积和互相关函数。输出取在 -2147483648~ 2147483647之间。在计算互相关时,需要将短的信号后面补0后在计算。
输入:
x长度,x 中的数字。比如:7,10 13 16 19 22 25 28
h长度,h 中的数字。比如:3,20 22 24
输出:
卷积。比如:9,200 480 846 1044 1242 1440 1638 1216 672
互相关。比如:13,0 0 0 0 240 532 870 1068 1266 1464 1662 1116 560
解法:卷积函数直接根据公式,模拟即可。注意把输出取在 -2147483648~ 2147483647之间。
计算互相关,先按照要求补全0。然后把 h 颠倒过来,计算 x 和它的卷积即可。
我只过了83%的测试点,大佬们可以帮忙找找代码问题,或是没考虑全的地方 QwQ
n1, x = input().strip().split(',')
n2, h = input().strip().split(',')
x = [int(n) for n in x.split()]
h = [int(n) for n in h.split()]
n1, n2 = int(n1), int(n2)
def conv(xx, hh):
    c = []
    for i in range(len(xx) + len(hh) - 1):
        s = 0
        for j in range(i, -1, -1):
            if i - j in range(len(xx)) and j in range(len(hh)):
                s += xx[i - j] * hh[j]
        if s < -2147483648:
            s = -2147483648
        if s > 2147483647:
            s = 2147483647
        c.append(s)
    return c
a = conv(x, h)
if n1 < n2:
    x.extend([0] * (n2 - n1))
else:
    h.extend([0] * (n1 - n2))
h.reverse()
b = conv(x, h)
print(f"{len(a)},{str(a)[1:-1].replace(',','')}")
print(f"{len(b)},{str(b)[1:-1].replace(',','')}")




#小米##小米笔试##小米23秋招笔试认真的吗#
全部评论
请大佬帮我解一下惑,为什么互相关那里要把h倒过来呢
点赞 回复 分享
发布于 2022-09-14 21:04 天津
选择是真恶心
1 回复 分享
发布于 2022-09-14 20:53 广东
一道题也没做出来,第一题不会,第二题没看懂题,我是fw
4 回复 分享
发布于 2022-09-14 21:05 上海
a了一道是不是凉了 还有第二道互相关公式是不是有点错 g了嘤嘤嘤
点赞 回复 分享
发布于 2022-09-14 21:19 黑龙江
第二题83% +1,不知道为啥
点赞 回复 分享
发布于 2022-09-14 22:15 广东
同第二题83%,不知道还有什么edge case了,做完了试了半小时试不出
点赞 回复 分享
发布于 2022-09-15 00:50 浙江
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-16 12:28 北京

相关推荐

EEbond:给北邮✌️跪了
点赞 评论 收藏
分享
hanliu:1. 排版与格式问题字体与对齐问题:标题和内容的字体大小差异不够明显,无法迅速吸引目光。某些文字看起来有些拥挤(比如校园经历中的“班委成员”部分)。2. 内容逻辑性模块顺序问题:实习经历放在较靠后的位置,实际上这部分内容对应聘来说更重要,建议提前突出。细节表述不够突出:比如教育背景部分的专业课程仅仅列出名字,没有说明自己在这些课程中表现如何或者掌握了什么技能,缺乏量化描述。多余内容:例如“班委成员”和“宣传委员”这类校园经历,叙述过于普通,缺乏和岗位相关的实质性贡献。,建议简写。3. 措辞专业性表达不够精准:例如“协助班长与团支书更好地为同学服务”显得较为笼统,没有实际成果的体现。用词重复:如“学习了焊接”“学习了光检”等重复词语较多,缺乏丰富的动词来展示个人能力(如“负责”“优化”“改进”等)。技能展示不足:虽然列出了UG和CAD证书,但没有明确提到这些技能如何在实际工作中发挥作用。4. 技能匹配度技能深度不足:虽然列出了掌握的软件和技术,但没有描述技能水平(如“熟练掌握”“精通”),也没有具体案例支持这些技能。缺乏岗位导向性:比如针对机械设计与制造方向,实习经历提到了“E6尾灯项目”,但没有详细说明自己在其中的技术贡献,可能会显得经验描述泛泛而谈。5. 自我评价问题表达空泛:如“具有良好的沟通协调能力”“责任心强”之类的描述太常见,没有让人眼前一亮的特点。缺乏成果支持:自我评价中的能力没有用具体项目、经历或成就来验证,可信度较弱。 兄弟加油
点赞 评论 收藏
分享
评论
5
38
分享

创作者周榜

更多
牛客网
牛客企业服务