8.24华为软件笔试一些小思路,希望大家笔试顺利

第一题:输入N个随机内存数,求其中最大连续的第一位以及最大连续的数量
例如:
输入
4
1 3 2 5
输出
1 3
解答:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int N,temp;
    cin>>N;
    vector<int> num
    for(int i=0;i<N;i++)
    {
        cin>>temp;
        num.push_back(temp);
    }
    sort(num.begin(),num.end());
    int max=0,loc=0,count=1;
    for(int i=1;i<N;i++)
    {
        if(num[i+1]=num[i]+1)
        {
            count+=1;
            if(max<count)
            {
                max=count;
                loc=i;
            }
        }
        else
            count=1;
    }
    cout<<num[loc]-max+1<<' '<<max;
    return 0;
}
第二题:输入N组依赖关系,最多1000个元素,求其中是否存在循环(最多存在一条循环),存在则输出升序排列,反之输出NA;
原题输入的是字符串,我简略成了输入数字
输入
4
1 2
3 4
1 3
4 1
输出
1 3 4
#include <bits/stdc++.h>
using namespace std;
int main()
{
        int N;
        cin>>N;
        vector< vector<int> > m(1000, vector<int>());
        int a,b;
        vector<int> loc;//有输入的
        vector<int> loc_zero;//无双向依赖的
        vector<int> loc_two;//双向依赖的
        while(cin>>a>>b)
        {
            m[a].push_back(b);
            m[b].push_back(-1*a);
            if(find(loc.begin(),loc.end(),a)==loc.end())
                loc.push_back(a);
            if(find(loc.begin(),loc.end(),b)==loc.end())
                loc.push_back(b);
        }
        for(int i=0;i<loc.size();i++)
        {
            if(m[loc[i]].size()<2||*max_element(m[loc[i]].begin(),m[loc[i]].end())<0||*min_element(m[loc[i]].begin(),m[loc[i]].end())>0)
                loc_zero.push_back(loc[i]);
            else
                loc_two.push_back(loc[i]);
        }
        int flag=1;
        while(flag>0)
        {    int j=0;
            while(j<loc_two.size())
            {    int p=0;
                while(p<m[loc_two[j]].size())
                {
                    if(find(loc_zero.begin(),loc_zero.end(),m[loc_two[j]][p])!=loc_zero.end())
                        m[loc_two[j]].erase(m[loc_two[j]].begin()+p, m[loc_two[j]].begin()+p+1);
                    else
                        p=p+1;
                }
                if(m[loc_two[j]].size()<2||*max_element(m[loc_two[j]].begin(),m[loc_two[j]].end())<0||*min_element(m[loc_two[j]].begin(),m[loc_two[j]].end())>0)
                { 
                    loc_zero.push_back(loc_two[j]);
                    flag=flag+1;
                    loc_two.erase(loc_two.begin()+j, loc_two.begin()+j+1);
                }
                else
                    j=j+1;
            }
            if(flag>1)
                flag=1;
            else
                flag=0;
        }
        if(loc_two.size()>0)
        {
         sort(loc_two.begin(),loc_two.end());
            for(int p=0;p<loc_two.size();p++)
                cout<<loc_two[p]<<' ';
        }
        else
            cout<<"NA";

        return 0;
}
第三题是村庄规划最短路径,我太菜了就没写出来

#华为笔试##华为机试##华为招聘#
全部评论
第二题 拓扑排序吧; 第一题没看懂题目,啥叫最大连续的第一位?
点赞 回复 分享
发布于 2022-09-22 11:27 广东
爱您
点赞 回复 分享
发布于 2022-09-18 17:18 江苏
老哥,投的什么部门什么岗位呀
点赞 回复 分享
发布于 2022-08-25 15:09 四川

相关推荐

程序员花海:实习太简单了 学历可以的 实习描述应该是先介绍业务 再介绍技术 技术咋推动业务的 做到了啥收益 有没有做实验 实验组和对照组有什么不同 你最后学到了什么 有没有参与处理过线上问题 有没有参与过公司的code review 有没有参与过技术分享 这些都是可以在实习描述中写的 并且实习和项目不一样不会撞车 应该放在最前面 放在教育背景下面 另外项目有点烂大街 可以看下我主页的简历优化案例
点赞 评论 收藏
分享
评论
18
40
分享

创作者周榜

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