算法设计中的小错误

Posted

技术标签:

【中文标题】算法设计中的小错误【英文标题】:tle error in algorithm design 【发布时间】:2017-12-02 18:30:06 【问题描述】:

给定大小为 n 的二进制字符串,有两种类型的查询

1.D为输入字符串D显示连续1的最长子数组长度

2.C X 用于输入字符串 C 和整数 x 如果为零,则将字符串位置 x 更改为 1

我的尝试

int main()
    int n,k,i,j,y,count=0;
    string s,x;
    int maxcount=0;
    cin>>n>>k;
    cin>>s;
    for(j=0;j<k;j++)
    
        cin>>x;
        if(x=='D')
        
            maxcount=0;
            for(i=0;i<n;i++)
            
                if(s[i]=='1')
                
                    count++;
                 else
                    maxcount = max(maxcount,count);
                    count=0;
                
            
            maxcount = max(maxcount,count);
            cout<<maxcount<<endl;

         else
            cin>>x;
            s[x-1] = '1';

        
    
return 0;

我认为可以使用离线查询来完成,任何人都可以提出方法或解决方案

【问题讨论】:

你有一些看起来非常 O(N^2) 的东西。比赛通常希望您知道或寻找将时间复杂度降低到更易于管理的“技巧” @user4581301 你能建议我的方法吗 这样做有什么意义?然后我赢得了比赛,而不是你。 @user4581301 你觉得哪场比赛不是来自比赛兄弟 那你的编译器坏了:ideone.com/Q0YajF 【参考方案1】:

您可以使用不相交的集合数据结构来解决您的问题。连续 '1' 的每个子串将是一个组件。当您将某些字符 '0' 更改为 '1' 时,您可以使用这个单个元素创建一个新集合。可能有几种情况:

    前一个字符和下一个字符是“1”。所以你可以合并这三个集合。 之前是“1”。您可以将这个与之前的集合合并。 接下来是“1”。您可以将其与下一组合并。

【讨论】:

以上是关于算法设计中的小错误的主要内容,如果未能解决你的问题,请参考以下文章

201671010140. 2016-2017-2 《Java程序设计》java学习第十三周

Oracle中的字符串缓冲区太小错误

Koch 的雪花实现中的小错误

存储加载后 extjs 4.0.7 中 Combobox 中的小错误

开发中的小错误,大麻烦

王道综合题17.设计一个算法用于判断带头结点的循环双链表是否对称及其注意思考:while循环第二个判断条件易误写成p->next!=q,分析这样会产生什么问题。