485. 最大连续1的个数
给定一个二进制数组, 计算其中最大连续1的个数。

示例 1:

输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:

输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。

两种思路,一种是直接遍历,计算最大连续1的个数;一种是动态规划。

思路一、直接遍历
代码:

public int findMaxConsecutiveOnes(int[] nums){

        if(nums == null || nums.length == 0){
            return 0;
        }
        int max_ones = 0;
        if(nums[0] == 1){
            max_ones = 1;
        }else
        {
            max_ones = 0;
        }
        int result = max_ones;
        for(int i = 1;i < nums.length;i++){
            if(nums[i] == 1){
                max_ones++;
            }
            else{
                max_ones = 0;
            }
            result = Math.max(result,max_ones);
        }
        return result;
}

思路二、动态规划
动态规划三要素:初始值、关系式、结束值,中心思想是将问题拆分成可以重复利用的子问题来寻找解。
解体步骤,
代码:

public int findMaxConsecutiveOnes2(int[] nums){

        if(nums == null || nums.length == 0){
            return 0;
        }
        int result = nums[0];
        for(int i = 1;i < nums.length;i++){
            if(nums[i] == 1){
                nums[i] = nums[i-1] + 1;
            }else{
                nums[i] = 0;
            }
            result = Math.max(result,nums[i]);
        }
        return result;
}
以例子nums= [1,1,0,1,1,1]来讲,该方法得到了一个新的数组
nums=[1,2,0,1,2,3]
而返回结果即为新nums中的最大值3
posted on 2021-02-15 12:59  东宁王孟川  阅读(144)  评论(1)    收藏  举报