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 广东
a了一道是不是凉了 还有第二道互相关公式是不是有点错 g了嘤嘤嘤
点赞 回复 分享
发布于 2022-09-14 21:19 黑龙江
一道题也没做出来,第一题不会,第二题没看懂题,我是fw
4 回复 分享
发布于 2022-09-14 21:05 上海
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-16 12:28 北京
同第二题83%,不知道还有什么edge case了,做完了试了半小时试不出
点赞 回复 分享
发布于 2022-09-15 00:50 浙江
第二题83% +1,不知道为啥
点赞 回复 分享
发布于 2022-09-14 22:15 广东

相关推荐

时间线:&nbsp;1.4-1.5:&nbsp;boss&nbsp;牛客&nbsp;官网&nbsp;实习僧海投了两天,&nbsp;感觉确实没啥招人的啊,&nbsp;心里凉了一半.1.6:&nbsp;中午快手约面,&nbsp;下午字节hr飞书私聊约面,&nbsp;当时想着第一次面大厂感觉三个过一个一面就已经赢了.1.7:&nbsp;下午&nbsp;3点大厂处女面,&nbsp;哈哈面试官是重邮红岩的直接保送;&nbsp;5点快手一面,&nbsp;我说这个是我的第二次大厂面试,&nbsp;面试官问要是拿到字节和快手选择哪个,&nbsp;我说昨天看了一晚上快手百分百选快手哈哈哈.&nbsp;晚上5.30字节约二面,&nbsp;快手约二面,&nbsp;小红书约一面.1.8:&nbsp;下午2点快手二面,&nbsp;聊天面体验非常好(当天电话确认入职时间);&nbsp;4点字节二面这次不是校友了,&nbsp;然后有一个CSS实现switch效果的忘记属性咋写了,&nbsp;感觉危了;&nbsp;7.30&nbsp;问字节hr是不是挂了;&nbsp;9点开始小红书一面,&nbsp;难死我了,&nbsp;但我还是笑着面完了,&nbsp;然后卸载了小红书,&nbsp;但是过了一会会小红书hr约二面,&nbsp;遂下回来了字节约三面.1.9:&nbsp;下午2点字节三面,&nbsp;依旧聊天+算法,&nbsp;自己太菜了有一个写错了,&nbsp;面完感觉又危了;&nbsp;5点面小红书20min结束(offer审批);5.30又去问字节hr是不是挂了,&nbsp;hr小姐姐说干嘛用一个句式,&nbsp;我说手写题又又又没写出来😂,&nbsp;2min后约hr面;8.30&nbsp;快手offer总结,&nbsp;自己运气好遇到了好公司好部门好面试官,&nbsp;字节剪映&nbsp;快手电商&nbsp;小红书支付的面试体验都非常好,&nbsp;不会的题会带你一步一步思考,&nbsp;流程也非常快全部都是当天推进,&nbsp;小红书是以分钟为单位推进.&nbsp;&nbsp;面经以及细节等我慢慢整理,&nbsp;&nbsp;以及保佑所有的审批不要出问题,&nbsp;我是真怕最后全过了0offer😂bg:&nbsp;重邮&nbsp;大数据&nbsp;蓝山工作室&nbsp;一段非大厂实习
独角仙梦境:这是真👻了
找实习记录
点赞 评论 收藏
分享
求求要我吧:你教育经历放在下面干什么,而且27届还是28届啊()另外看你简历有两面,通常来说投递运营岗位一面简历就够了。另外个人总结要写也放在简历最下面,然后你奖项那里是2019年的哇哈哈,那你究竟投递的是社招还是实习?实习的话你是第几届是肯定要写出来的,社招的话你这个工作经历又太短太花了
点赞 评论 收藏
分享
评论
5
38
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务