外贸营销网站,wordpress算数验证码,wordpress痞子,哈尔滨网站制作软件目录
题目#xff1a;
示例#xff1a;
分析#xff1a;
代码#xff1a; 题目#xff1a; 示例#xff1a; 分析#xff1a;
这道题难在阅读理解#xff0c;题目看得我匪夷所思#xff0c;错了好多个测试用例才明白题目说的是什么。
我简单翻译一下就是寻找1和…目录
题目
示例
分析
代码 题目 示例 分析
这道题难在阅读理解题目看得我匪夷所思错了好多个测试用例才明白题目说的是什么。
我简单翻译一下就是寻找1和-1之间0最多的数量1和-1之间只能有0。
我们可以套两层循环第一层for循环去寻找1如果找到了1那么我们开始在当前下标往左右两边寻找最近的-1并且统计0的数量需要注意的是如果先碰到了1那么表示我们无法落脚也就不能更新答案因为题目说的我们只能在-1的地方落脚并且1到-1之间只能有0。
在结束往右寻找的时候我们可以把往右寻找的下标赋值给第一层循环的下标因为我们结束往右寻找的时候下标所在的位置要么是1要么是-1赋值给第一层循环可以少遍历几次不过题目中给的数据量比较小所以这个小优化是可有可无的。 具体操作可以参考下面的代码和动图。 代码
class Solution {
public:int captureForts(vectorint forts) {int res0;int nforts.size();for(int i0;in;i){if(forts[i]1){ //遇到了自己的城堡int t0,indexi-1;while(index0){ //去寻找左边能摧毁的敌人城堡数量if(forts[index]1) break; //先遇到自己的城堡则表示左边没有落脚点if(forts[index]-1){ //当遇到空地就结束寻找并更新答案resmax(res,t);break;}t;index--;}t0,indexi1;while(indexn){ //去寻找右边能摧毁的敌人城堡数量if(forts[index]1) break;if(forts[index]-1){resmax(res,t);break;}t;index;}//iindex-1; //小小优化一下,可有可无}}return res;}
};