微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

start=i,end=j 有什么区别;和开始= i;结束=j;

如何解决start=i,end=j 有什么区别;和开始= i;结束=j;

问题是“最大连续系列 1”

给定一个由 1 和 0 组成的数组。然后给你一个整数 M,它表示允许的翻转次数

找到翻转时将产生最大连续 1 系列的零位置。

我使用滑动窗口方法解决答案,但我注意到如果我写的 start=i;end=j;错误的,但 start=i,end=j; 是正确的。

它们的执行有什么区别?

vector<int> Solution::maxone(vector<int> &A,int B) {
    int n=A.size();
    int start=0,end=0,count=0,i,j;
    
    for(i=0,j=0;j<n;){
        if(B>=0 && !A[j++])
       
        B--;
        
        if(B<0 && !A[i++])
        
        B++;
        
        if(end-start<j-i)
        start=i,end=j;    // Here I get wrong ans if I write start=i;end=j;
    }
    
    vector<int> v;
    while(start<end)
    v.push_back(start++);
    
    return v;
    
}

解决方法

如果是 start=i;end=j;,你得到

if(end-start<j-i)
  start=i;
end = j;

因为 ; 使 end=j; 成为另一个声明

start=i,end=j; 是一个语句,因为逗号是一个 Comma operator

解决方案:使用if() {}

,

start = i,end = j; 是单个语句。 start = i; end = j; 是两个语句。 if 控制下一个语句。所以:

if (false)
    start = i,end = j;

不修改 startend

if (false)
    start = i; end = j;

修改end,因为end = jif之后的第二个语句,所以if不影响它。

if (false) {
    start = i; end = j;
}

不修改 startend,因为这两个赋值都在由花括号分隔的 复合语句 内。复合语句是 if 控制的单个语句。

,

首先,问题很简单 if 你没有使用大括号 {} 由于没有大括号所以只有一个语句(不是行)在 if 下被认为是 {{1} } 所以只要你输入 true statement,它就会完成 one 语句。

;

其次,如果您正确格式化代码,那么您将很容易发现错误。

最后,当您保留 if() <true statement>; if(){ <true statement>; <true statement>; } 而不是 , 时,它将被视为单个语句

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。