如何解决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;
不修改 start
或 end
。
if (false)
start = i; end = j;
修改end
,因为end = j
是if
之后的第二个语句,所以if
不影响它。
if (false) {
start = i; end = j;
}
不修改 start
或 end
,因为这两个赋值都在由花括号分隔的 复合语句 内。复合语句是 if
控制的单个语句。
首先,问题很简单 if
你没有使用大括号 {}
由于没有大括号所以只有一个语句(不是行)在 if
下被认为是 {{1} } 所以只要你输入 true statement
,它就会完成 one 语句。
;
其次,如果您正确格式化代码,那么您将很容易发现错误。
最后,当您保留 if()
<true statement>;
if(){
<true statement>;
<true statement>;
}
而不是 ,
时,它将被视为单个语句
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。