数据结构——编程珠玑

 先上程序:

#include "stdio.h"
#include "stdlib.h"
typedef struct BEAD{
    char color;
    struct BEAD* prior;
    struct BEAD* next;
}BEAD;
int main(void)
{
    int n,i,num,num_b=0,i_p,i_n,flag=1;
    char color_p='b';
    BEAD *first,*goon,*before,*point,*check1,*check2;
    scanf("%d",&n);
    getchar();
    first=(BEAD*) malloc(sizeof(BEAD));
    first->color=getchar();
    first->next=first;
    first->prior=first;
    point=before=first;
    for (i=2; i<=n; i++,before=before->next) {
        goon=(BEAD*)malloc(sizeof(BEAD));
        goon->color=getchar();
        goon->next=first;
        goon->prior=before;
        before->next=goon;
        first->prior=goon;
    }
    for (i=0;i<=n; point=point->next,i++) {
        if (point->color!='w')
            color_p=point->color;
        if ((point->next->color=='w')?0:(point->next->color!=color_p)) {
            flag=0;
            check2=check1=point;
            for (i_p=0; (check1->color=='w')?1:check1->color==color_p; check1=check1->prior) {
                i_p++;
            }
            for (i_n=0; (check2->next->color=='w')?1:check2->next->color!=color_p; check2=check2->next) {
                i_n++;
            }
            num=i_p+i_n;
            num_b=(num_b>num)?num_b:num;
        }
    }
    free(first);
    if ((flag==1)||(num_b>=n)) {
        printf("%d\n",n);
    }
    else printf("%d\n",num_b);
    return 0;
}
这个题目不同算法写了总共有3次,第一次,是只在r和b相连时开始计数,这样明显不行,网教里的一个非隐藏案例提醒了我

第二次,我没多想,干脆碰见不同的就判断计数,毫无疑问的TLE了

第三次,问了下大神,采用了上面的方法,程序比较紧凑,运行消耗时间也不大

  不过,我在程序里多次使用了 ?: 运算符,应该要注意改进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值