1、题目大意:
输入矩阵的行列
山脉数组:类似1356874321这种数,从左到右先递增然后递减的规则
现要求将山脉数组进行从小到大排序输出,且不输出重复值
要求时间复杂度O(N),空间复杂度O(1)
2、题目大意:找到一串url中的域名将其提取输出
比如:https://www.baidu.com/search=balabala
域名为:www.baidu.com
输入中可能有一些不符合规则的url
现要求将山脉数组进行从小到大排序输出,且不输出重复值
要求时间复杂度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
比如矩阵 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) 回帖