leetcode 485. 最大连续1的个数

it2024-05-07  62

最大连续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; } }
最新回复(0)