NO.1
思路:双指针模拟,begin表示最长数字字符串最后一个字符,而len表示数字字符串的长度,i用来遍历,如果为数字,那么定义j变量继续遍历,直到不为数字,i-j如果大于len,就更新len。最后string的substr打印就行了。
代码实现:
#include <iostream>
#include<string>
using namespace std;
int main() {
string s;
cin>>s;
int begin=-1,len=0;
int n=s.size();
for(int i=0;i<n;i++)
{
if(s[i]>='0'&&s[i]<='9')
{
int j=i;
while(j<n&&s[j]>='0'&&s[j]<='9') j++;
if(j-i>len)
{
begin=i;
len=j-i;
}
i=j;
}
}
cout<<s.substr(begin,len)<<endl;
return 0;
}
NO.2
思路:dfs遍历,先用创建一个bool数组,先进行遍历,如果该位置的值为1,且bool数组在该位置为false,那么就调用dfs函数进行搜索,在dfs中先将bool数组的该位置改为true,在遍历它的上下左右四个位置,进行dfs搜索。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
bool vis[210][210]={0};
int solve(vector<vector<char> >& grid) {
int m=grid.size(),n=grid[0].size();
int ret=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(grid[i][j]=='1'&&!vis[i][j])
{
ret++;
dfs(grid,i,j);
}
}
}
return ret;
}
void dfs(vector<vector<char> >& grid,int i,int j)
{
vis[i][j]=true;
for(int k=0;k<4;k++)
{
int x=i+dx[k],y=j+dy[k];
if(x>=0&&x<grid.size()&&j>=0&&j<grid[0].size()&&grid[x][y]=='1'&&!vis[x][y])
{
dfs(grid,x,y);
}
}
}
};
NO.3
思路:枚举出总共有10种情况,而只要满足以下的四种情况那么就符合,输出Yes。
代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
int t;
int arr[6];
int main()
{
cin>>t;
while(t--)
{
for(int i=0;i<6;i++) cin>>arr[i];
sort(arr,arr+6);
if(arr[0]+arr[1]>arr[2]&&arr[3]+arr[4]>arr[5]||
arr[0]+arr[2]>arr[3]&&arr[1]+arr[4]>arr[5]||
arr[0]+arr[3]>arr[4]&&arr[1]+arr[2]>arr[5]||
arr[0]+arr[4]>arr[5]&&arr[1]+arr[2]>arr[3])
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}