首页 > 字节ES提前批第五次笔试
头像
load-struct
编辑于 2020-07-23 17:13
+ 关注

字节ES提前批第五次笔试

1、题目大意:
山脉数组:类似1356874321这种数,从左到右先递增然后递减的规则
现要求将山脉数组进行从小到大排序输出,且不输出重复值
要求时间复杂度O(N),空间复杂度O(1)
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
    string inputs;
    getline(cin, inputs);
    stringstream ss;
    ss << inputs;
    string str;
    vector<string> input;
    while (getline(ss, str, ','))
    {
        input.push_back(str);
    }
    int start = 0, end = input.size() - 1;
    string temp = "";
    while (start <= end)
    {
        if (input[start] < input[end])
        {
            if (input[start] != temp)//判断上次是否输出过该数
            {
                cout << input[start];
                temp = input[start++];//记录输出的数
            }
            if (input[start] == temp)
            {
                start++;
            }
        }
        else if (input[start] > input[end])
        {
            if (input[end] != temp)
            {
                cout << input[end];
                temp = input[end--];
            }
            if (input[end] == temp)
            {
                end--;
            }
        }
        else if (input[start] == input[end])
        {
            if (input[start] != temp)
            {
                cout << input[start];
                temp = input[start++];
                end--;
            }
            else
            {
                start++;
                end--;
            }
        }
        if (temp < input[start] || temp < input[end]) //如果temp小于下一个指针的数,说明后面还有更大的数,则添加逗号
            cout << ',';                              //仅考虑递增情况,山脉的要求必须是先递增然后递减,不存在相邻相等的情况
    }
    cout << endl; //看情况增删
    system("pause");
    return 0;
}


2、题目大意:找到一串url中的域名将其提取输出
比如:https://www.baidu.com/search=balabala
域名为:www.baidu.com
输入中可能有一些不符合规则的url
/***********************
求问第二题代码
url 头疼
***********************/
3、
比如矩阵  0 1 1 0
0 0 0 0
0 1 1 1
0 0 1 1
输入一个坐标,找到上下左右相邻的同属性块(1为一种属性,0为另一种属性) 类似于图像的边缘提取
例如

输入矩阵的行列
然后矩阵
然后点坐标(x,y)
然后输出坐标(最后的输出要保证y从大到小,然后x从大到小)

第三题来不及测试
只写了代码(后续的输出没有排序)
#include<bits/stdc++.h>  

using namespace std; 

void DFS(vector<vector<int>> &array,vector<vector<int>> &mymap, vector<vector<int>> &visited,int i, int j, bool flag)
{
    if( i<0 || i>array.size()-1 || j<0 || j>array[0].size()-1 ||visited[i][j]==1)
        return;

    bool cur = array[i][j];

    if(cur == flag && visited[i][j]==0)
    {
        visited[i][j] = 1;
        vector<int> tmp;
        tmp.push_back(i);
        tmp.push_back(j);
        mymap.push_back(tmp);

        DFS(array, mymap, visited, i, j+1, flag);
        DFS(array, mymap, visited, i, j-1, flag);
        DFS(array, mymap, visited, i+1, j, flag);
        DFS(array, mymap, visited, i-1, j, flag);
    }
    else
        return;

}

int main()
{
    int m,n;
    scanf("%d%d\n",&m,&n);
    string arr;
    getline(cin,arr);
    
    vector<vector<int>> array;

    for(int len =0;len<arr.size();)
    {
        int i=n;
        vector<int> tmp;
        while(i--)
        {
            tmp.push_back(arr[len]-'0' );
            len++;
        }
        array.push_back(tmp);
        tmp.clear();
    }


    int row,col;
    row = array.size();
    if(!row)    return 0;
    col = array[0].size();

    vector<vector<int>> visited(row, vector<int>(col,0));

    vector<vector<int>> mymap;

    string str;
    cin>>str;
    int x,y;
    size_t find1=str.find(',');
    x= atoi(str.substr(1,find1).c_str());
    y= atoi(str.substr(find1+1,str.size()-find1).c_str());
    x=x-1;
    y=y-1;
    
    bool flag = array[x][y];

    DFS(array,mymap,visited,x,y,flag);

    for(int i=0;i<mymap.size();i++)
    {
        cout<<"("<<mymap[i][0]+1<<","<<mymap[i][1]+1<<")"<<endl;
    }

	return 0;
}


全部评论

(5) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐