华为OD机考题分享

第一题:

    有个N个正整数组成的序列,给定整数sum, 
    求长度最长的连续子序列,使他们的和等于sum 
    返回子序列长度,如果没有满足要求的序列,返回-1

这道题想到了leetcode78的那道组合的位扩展写法,

第二题:

    乱序数组,删除所有重复元素 使得每个元素只出现一次,
    并且按照出现的次数的由高到低进行排序 
    相同出现次数,按照第一次出现的顺序进行先后排序(要求稳定) 

这道题写得比较恶心,挺暴力了,用了三个哈希字典,分别映射:数字——出现次数,出现次数——[数字列表],数字——第一次出现的位置

第三题:

    有N个网络结点,和M条路径,给一个时延表,表的每个元素为[源节点,目的结点,路径长度]
    然后提供一个要求的源节点,和目的结点,求出源节点到目的结点的最短路径

这个题用的Dijkstra算法,之前没做过这种题,好在考试时间比较富裕,现场凭着考研时稀薄的记忆推了一下,没AC,有些边界问题没考虑到,但是也通过大部分了。
#笔试题目##华为#
全部评论
第二题 感觉可以构建一个对象:元素,出现位置,出现次数,使用map存储 :key 元素 ,value 对象 ,首先进行依次遍历,构建map,然后将Collections.sort方法重写Comparator比较方法,首先按照出现 次数倒序,然后按照出现位置升序
2 回复 分享
发布于 2022-03-27 16:21
你的od机考怎么比其他人难很多
1 回复 分享
发布于 2022-03-28 05:12
第二题花五分钟写了一下,如果机试都这么简单就好了
点赞 回复 分享
发布于 2022-04-30 21:16
第一题,只会暴力的dfs求全部,第二题也是和楼主差不多。不过评论区,说用set的想法不错,就是时间复杂度是否会超呢? 第三题 直接放弃了!
点赞 回复 分享
发布于 2022-04-27 22:37
第二题用python7行就搞定了,java比较麻烦
点赞 回复 分享
发布于 2022-04-27 14:47
华为南京、东莞、北京研究所OD岗位招聘,小伙伴们可以看过来~抓紧私信我姓名联系方式 【招聘要求】 1、统招全日制本科及以上学历,计算机、电子、通信等相关专业 2、工作地点:南京、东莞、北京 3、掌握Java、Python、C/C++、JS等主流开发语言中的一种 【内推优势】 1)已经成功内推多人,入职率很高哦! 2)通过我内推投递岗位,简历可获得优先筛选,可以帮助查询内推进度,有需要可以给到你一些面试建议哈! 注意,是社招岗位,应届生也可以面试,但是要毕业后才能发offer,抓紧私信我姓名联系方式
点赞 回复 分享
发布于 2022-04-24 17:44
楼主请问考试的时候每道题可以提交多次还是只能提交一次?
点赞 回复 分享
发布于 2022-04-07 15:48

相关推荐

头像 会员标识
03-14 17:03
嵌入式软件开发
第一题:给一个区间[l, r],计算区间中整数的因子数是奇数的个数并输出,比如12的因子数有:1,2,3,4,6,12,因此12不符合条件。这题只要意识到因子数都是成对出现的即可,只有当有2个因子数相等时才会出现奇数情况,比如:1=1*1, 4=2*2, 9=3*3,81=9*9我是对左右区间开平方取整,然后相减即可,注意想清楚并处理闭区间的特殊情况第二题:给定一个超级斐波拉契数列,前k个值为1,第n项是前n-1到n-k之和,输入k和q,q代表查询次数,接下来有q次输入,每次输入x,x代表查询第x项,输出答案,答案可能很大,因此要求输出对(10^9+7)取模这题考的时候想复杂了,半天没写出来,后来理清楚思路之后感觉也还好,但感觉还是挺多坑的,滑动窗口应该是最优时间复杂度吧。#include <bits/stdc++.h>using namespace std;const int MOD = 1e9 + 7;// 参数:滑动数组、窗口大小、淘汰指针、结果、目标项序号、当前序号int search(vector<long long>& path, int& k, int& re, long long& result, int& x, int& index){// [re]需要用之前的result更新,而result又需要用[re]更新,因此必须用一个临时变量操作int reval = path[re];         //临时变量保留滑出的值,用于更新resultpath[re] = result;            //更新滑动窗口++re;                         //更新滑动指针,并检测环if(re==k)re = 0;++index;                              //更新indexresult = (result*2 - reval) % MOD;    //更新第index项的值if (result < 0) result += MOD;        // 保证非负if(index==x)return result;return search(path, k, re, result, x, index);}int main(){int k;int q;cin >> k >> q;while(q--){int x;cin >> x;vector<long long> path(k, 1);int re = 0;long long result = k;index = k+1;if(x<=k)cout << 1;else if(x==k+1)cout << k;elsecout << search(path, k, re, result, x, index); //从第k+1项开始才滑动if(q!=0)cout << endl;}return 0;}
点赞 评论 收藏
分享
评论
12
67
分享

创作者周榜

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