- 最大连续1的个数
给定一个二进制数组, 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:
输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。
思路:动态规划,如果第i位为1,则前i位最长的连续1位数 = 前i-1位最长连续1的位数 + 1,如果为0,位数就是0,用一个dp数组来记录最长位数,时间复杂度为O(n),空间复杂度为O(n)
代码:
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int[] dp = new int[10000];
int max = 0;
if(nums[0] == 1){
dp[0] = 1;
}
for(int i = 1;i < nums.length;i++){
if(nums[i] == 1){
dp[i] = dp[i-1] + 1;
}else{
dp[i] = 0;
}
}
for(int i : dp){
if(i > max){
max = i;
}
}
return max;
}
}
思路2:并不需要存储第i-2及再往前的最大连续1的位数,所以不用数组,改用pre来记录前一项的数据,时间复杂度O(n),空间复杂度O(1)
代码2:
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int pre = 0;
int cur = 0;
int max = 0;
if(nums[0] == 1){
pre = 1;
max = 1;
}
for(int i = 1;i < nums.length;i++){
if(nums[i] == 1){
cur = pre + 1;
pre = cur;
}else{
cur = 0;
pre = 0;
}
if(pre > max){
max = pre;
}
}
return max;
}
}