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-08-25 15:09 四川
爱您
点赞 回复 分享
发布于 2022-09-18 17:18 江苏
第二题 拓扑排序吧; 第一题没看懂题目,啥叫最大连续的第一位?
点赞 回复 分享
发布于 2022-09-22 11:27 广东

相关推荐

18 40 评论
分享
牛客网
牛客企业服务