1.1 broken neckless(一直想用O(N)复杂度的方法写,写了两天两个百多行的都跪了,还是乖乖用O(N^2)复杂度的方法写算了)
来源:互联网 发布:阿里云注销 编辑:程序博客网 时间:2024/05/01 14:53
/*
ID:15521201
LANG:C++
PROG:beads
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char neckless[500];
int n;
int main()
{
freopen("beads.in","r",stdin);
freopen("beads.out","w",stdout);
int left(char t,int m);
int right(char t,int m);
int i,j,sum,t,single;
char temp;
cin>>n>>neckless;
for(i=0,single=0;i<n;i++)
{
if(single==0&&neckless[i]!='w')
{
single=1;
temp=neckless[i];
}
else if(single==1&&neckless[i]!='w'&&neckless[i]!=temp)
{
single=2;
temp=neckless[i];
}
else if(single==2&&neckless[i]!='w'&&neckless[i]!=temp)
{
single=3;
break;
}
}
if(single==3)
{
temp='0';
for(i=0,sum=0;i<n;i++)
{
if(neckless[i]!='w'&&neckless[i]!=temp)
{
t=left(neckless[i],i)+right(neckless[i],i);
sum=(sum>t)?sum:t;
temp=neckless[i];
}
}
}
else sum=n;
cout<<sum<<endl;
return 0;
}
int left(char t,int m)
{
int i,sum;
for(i=m-1,sum=0;i!=m;i--)
{
if(i==-1)i=n-1;
if(neckless[i]!=t)
sum++;
else if(neckless[i]==t)
break;
}
return (sum);
}
int right(char t,int m)
{
int i,sum;
for(i=m+1,sum=1;i!=m;i++)
{
if(i==n)i=0;
if(neckless[i]==t||neckless[i]=='w')
sum++;
else if(neckless[i]!=t||neckless[i]!='w')
break;
}
return (sum);
}
思路就是在至少为(r~~~w~~~r或者w~~~r~~~w的格式下),当找到一次转变时(转变:前一非‘w’字符为‘r’,第一次穿线‘b’或相反),从该字符左边
第一位开始循环到出现和该字符相同为止,把其中的‘w’和与它不同的字符出现数代为left,同理,从该字符右边第一位开始循环到出现于该字符不同的字符
且不为‘w’为止,把其中的‘w’和与它相同的字符字符出现数代为right。
吧left和right相加,求每次的最大值。
ID:15521201
LANG:C++
PROG:beads
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char neckless[500];
int n;
int main()
{
freopen("beads.in","r",stdin);
freopen("beads.out","w",stdout);
int left(char t,int m);
int right(char t,int m);
int i,j,sum,t,single;
char temp;
cin>>n>>neckless;
for(i=0,single=0;i<n;i++)
{
if(single==0&&neckless[i]!='w')
{
single=1;
temp=neckless[i];
}
else if(single==1&&neckless[i]!='w'&&neckless[i]!=temp)
{
single=2;
temp=neckless[i];
}
else if(single==2&&neckless[i]!='w'&&neckless[i]!=temp)
{
single=3;
break;
}
}
if(single==3)
{
temp='0';
for(i=0,sum=0;i<n;i++)
{
if(neckless[i]!='w'&&neckless[i]!=temp)
{
t=left(neckless[i],i)+right(neckless[i],i);
sum=(sum>t)?sum:t;
temp=neckless[i];
}
}
}
else sum=n;
cout<<sum<<endl;
return 0;
}
int left(char t,int m)
{
int i,sum;
for(i=m-1,sum=0;i!=m;i--)
{
if(i==-1)i=n-1;
if(neckless[i]!=t)
sum++;
else if(neckless[i]==t)
break;
}
return (sum);
}
int right(char t,int m)
{
int i,sum;
for(i=m+1,sum=1;i!=m;i++)
{
if(i==n)i=0;
if(neckless[i]==t||neckless[i]=='w')
sum++;
else if(neckless[i]!=t||neckless[i]!='w')
break;
}
return (sum);
}
思路就是在至少为(r~~~w~~~r或者w~~~r~~~w的格式下),当找到一次转变时(转变:前一非‘w’字符为‘r’,第一次穿线‘b’或相反),从该字符左边
第一位开始循环到出现和该字符相同为止,把其中的‘w’和与它不同的字符出现数代为left,同理,从该字符右边第一位开始循环到出现于该字符不同的字符
且不为‘w’为止,把其中的‘w’和与它相同的字符字符出现数代为right。
吧left和right相加,求每次的最大值。
0 0
- 1.1 broken neckless(一直想用O(N)复杂度的方法写,写了两天两个百多行的都跪了,还是乖乖用O(N^2)复杂度的方法写算了)
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n), 空间复杂度是O(1)
- 数组a[N],存放了N个数,其中某个数重复一次。 写一个函数,找出被重复的数字.时间复杂度必须为o(N)
- 一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
- 一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
- 一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
- 写一个函数查找每个字符的个数,区分大小写,时间复杂度要求O(n)
- (思科笔试)数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
- 数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
- 数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
- 数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)
- 一种复杂度的为O(n)的排序方法
- Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法
- Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法
- 使用O(n)的时间复杂度合并两个数组
- 求最大值最小值的方法 时间复杂度O(n)
- poj 3419 Difference Is Beautiful (开始的方法复杂度还是没降下去附o(n*log(n)))的方法
- 关于O(n^2)复杂度的体验
- UIMenuController的基本使用
- 转自原文地址:IOS UIScrollview UIImageView点击事件处理
- 关于listview的研究(一)
- 调节UILabel的行间距
- 《你必须知道的495个C语言问题》笔记--C预处理器
- 1.1 broken neckless(一直想用O(N)复杂度的方法写,写了两天两个百多行的都跪了,还是乖乖用O(N^2)复杂度的方法写算了)
- jQuery对象转换为DOM对象
- 程序运行过程中数据的益出问题
- 游标的使用
- DropBoxManager简介
- 《你必须知道的495个C语言问题》笔记--标准输入输出
- maven自动化:部署项目到tomcat
- 《你必须知道的495个C语言问题》笔记--库函数
- Argument list too long