华为研发岗AI方向9.9机考题复盘&分析

选择题感觉是我刷的几套题里面最最基础、最最友好的一套题目,2道算法题也是。总体时间分配大概是20 45 45(前面晚进考场7分钟,是反面例子,大家不要学习!!!),预计分数280分左右。

这次AI岗选择题我觉得没有什么好说的新点。

第一道算法题考的试K-means变体,拆分成find_region()和find_cdn()两个步骤,交替进行,直到CDN候选序列不再变化。这里需要注意的点就是find_region划分簇的时候,如果一个城市到几个CDN点位距离相同,则CDN转发服务点序号选取最小的。不过这边我的AC率是90%,用Python3运行时长13ms,一个用例答案错误,我觉得题目在簇内定位新CDN点的时候需要补充一个约束,因此这边我提出一个问题。

复制代码
问题:划分区域步骤制定了用户距离相同则取序号小的点的规则,但对于区域内迭代步骤,如果簇内总用户距离相同,没有指定需不需要按照原来的编号,还是取当前簇内序号最小的作为CDN地址。

下面是源代码:

python 复制代码
# AC率90%,问题:划分区域制定了用户距离相同则取序号小的点的规则,但区域内迭代如果簇内总用户距离相同,没有指定需不需要按照原来的编号,
# 还是取簇内序号最小的作为CDN地址
def func():
    # please define the python3 input here. For example: a,b = map(int, input().strip().split())
    p = int(input())
    xs = []
    ys = []
    us = []
    for i in range(p):
        x, y,u = map(float, input().split(","))
        xs.append(x)
        ys.append(y)
        us.append(u)
    q = int(input())

    # please finish the function body here.
    def find_region(cdn:list)->dict:
        cdn.sort()
        regions=dict()
        for c in cdn:
            regions.setdefault(c,[c])
        for i in range(p):
            if i in cdn:
                continue
            x0,y0=xs[i],ys[i]
            min_index = cdn[0]
            min_distance=((x0-xs[cdn[0]])**2+(y0-ys[cdn[0]])**2)**0.5
            for c in cdn:
                distance= ((x0-xs[c])**2+(y0-ys[c])**2)**0.5
                if distance<min_distance:
                    min_index=c
                    min_distance=distance
            regions[min_index].append(i)

        return regions


    def find_cdn(regions:dict)->list:
        new_cdn=[]
        for c,region in regions.items():
            region.sort()
            min_index = region[0]
            min_distance=sum([us[r]*((xs[r]-xs[min_index])**2+(ys[r]-ys[min_index])**2)**0.5 for r in region])
            for r2 in region:
                distance=sum([us[r]*((xs[r]-xs[r2])**2+(ys[r]-ys[r2])**2)**0.5 for r in region])
                if distance<min_distance:
                    min_index=r2
                    min_distance=distance
            new_cdn.append(min_index)
        new_cdn.sort()

        return new_cdn


    cdn_last = list(range(q))
    cdn_iter=[]
    regions_final=dict()
    while cdn_last!=cdn_iter:
        cdn_iter=cdn_last[:]
        regions=find_region(cdn_iter)
        cdn_last=find_cdn(regions)
        regions_final=regions.copy()
        # print(cdn_last)


    # please define the python3 output here. For example: print().
    # 按照横纵坐标依次重排
    cdn_last.sort(key=lambda c:xs[i]*101+ys[i])
    for c in cdn_last:
        total_users=sum([us[r] for r in regions_final[c]])
        print("{:.2f},{:.2f},{:.2f}".format(xs[c],ys[c],total_users))


if __name__=="__main__":
    func()

第二道算法题是关于KV-Cache动态稀疏压缩的,是一个模拟和排序的基础问题,不需要numpy。我最后差几十秒没有成功提交,真的后悔当时晚进去7分钟!!!!!!

需要注意的是,注意力分数相同的时候按照l>h>pos的优先级筛选,直接按照1维列表的方式处理即可,最后5分钟我是在行、列、token位置定位的地方卡了一下,最后没来及交,其实行数l就是sort_indexi//(H*N),列数c就是sort_indexi%(H*N)//N(注意不是直接%H),填充的位置pos就是sort_indexi%N。

python 复制代码
# 直接编写无numpy库版本
def func2():
    # please define the python3 input here. For example: a,b = map(int, input().strip().split())
    L, H, N, M = map(int, input().split())
    ascores = []
    for l in range(L):
        HN_score = list(map(float, input().split()))
        ascores += HN_score
    pos = int(input())

    # please finish the function body here.
    remains = M - L * H
    # print(f'remains:{remains}')
    ascores_f = ascores[:]
    index=list(range(len(ascores_f)))
    index.sort(key=lambda i:ascores_f[i],reverse=True)
    count=0
    output=[[[pos] for j in range(H)] for i in range(L)]
    for k in range(len(ascores_f)):
        rem=index[k]%N
        if rem!=pos:
            count+=1
            line=index[k]//(H*N)
            column=index[k]%(H*N)//N
            output[line][column].append(rem)

        if count==remains:
            break

    # please define the python3 output here. For example: print().
    lines=[]
    for l in range(L):
        line=[]
        for h in range(H):
            output[l][h].sort()
            line.append(",".join([str(e) for e in output[l][h]]))
        lines.append(line)

    for line in lines:
        print(" ".join(line))


if __name__ == "__main__":
    func2()

最后的最后,有疑问和想法欢迎踊跃指出和交流!

相关推荐
sell-cloud2 小时前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国3 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI3 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区4 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris6 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy6 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V6 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI6 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技6 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
gCode Teacher 格码致知6 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas