给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
示例 1:
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例 2:
输入:nums = [1,0,1,1,0,1]
输出:2
提示:
1 <= nums.length <= 105
nums[i] 不是 0 就是 1.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-consecutive-ones
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package cn.fansunion.leecode.todo;
/**
* 485. 最大连续 1 的个数
* 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
* 力扣
* @author wen.lei@brgroup.com
*
* 2022-2-26
*/
public class MaxConsecutiveOnes {
/* 示例 1:
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例 2:
输入:nums = [1,0,1,1,0,1]
输出:2
提示:
1 <= nums.length <= 105
nums[i] 不是 0 就是 1.*/
/**
* 遍历数组,维护当前最大1的个数和最大连续1的个数,返回max
* @param nums
* @return
*/
public int findMaxConsecutiveOnes(int[] nums) {
int currentConsecutiveOneSize=0;
int maxConsecutiveOneSize=0;
for(int num:nums) {
if(num==1) {
currentConsecutiveOneSize++;
//性能考虑,1连续时没更新最大值,连续中断更新或最后更新1次即可
}else {
//遇到0,连续中断,更新最大值
maxConsecutiveOneSize=Math.max(maxConsecutiveOneSize, currentConsecutiveOneSize);
currentConsecutiveOneSize=0;
}
}
//可能全都是1或最后一段全是1
maxConsecutiveOneSize=Math.max(maxConsecutiveOneSize, currentConsecutiveOneSize);
return maxConsecutiveOneSize;
}
}
package test.leecode.number;
import org.junit.Assert;
import org.junit.Test;
import cn.fansunion.leecode.todo.MaxConsecutiveOnes;
/**
* @author wen.lei@brgroup.com
*
* 2022-2-25
*/
public class MaxConsecutiveOnesTest {
@Test
public void test() {
MaxConsecutiveOnes test = new MaxConsecutiveOnes();
int[] nums0=new int[] {0,0,0,0,0};
Assert.assertEquals(0, test.findMaxConsecutiveOnes(nums0));
int[] nums1=new int[] {1,0,0,0,0};
Assert.assertEquals(1, test.findMaxConsecutiveOnes(nums1));
int[] nums11=new int[] {0,0,0,0,1};
Assert.assertEquals(1, test.findMaxConsecutiveOnes(nums11));
int[] nums2=new int[] {1,1,0,0,0};
Assert.assertEquals(2, test.findMaxConsecutiveOnes(nums2));
int[] nums21=new int[] {1,0,1,1,0};
Assert.assertEquals(2, test.findMaxConsecutiveOnes(nums21));
int[] nums22=new int[] {1,0,0,1,1};
Assert.assertEquals(2, test.findMaxConsecutiveOnes(nums22));
int[] nums3=new int[] {0,0,1,1,1};
Assert.assertEquals(3, test.findMaxConsecutiveOnes(nums3));
int[] nums31=new int[] {1,0,1,1,1};
Assert.assertEquals(3, test.findMaxConsecutiveOnes(nums31));
int[] nums32=new int[] {1,1,1,0,1};
Assert.assertEquals(3, test.findMaxConsecutiveOnes(nums32));
int[] nums6=new int[] {1,0,1,1,1,1,1,1};
Assert.assertEquals(6, test.findMaxConsecutiveOnes(nums6));
int[] nums7=new int[] {1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0};
Assert.assertEquals(7, test.findMaxConsecutiveOnes(nums7));
}
}