【Leetcode】485. Max Consecutive Ones

112 阅读1分钟

题目地址: leetcode.com/problems/ma…

给定一个数组,求其最长只含1 11的子数组的长度。思路是快慢双指针。代码如下:


public class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        
        // l为慢指针,r为快指针
        int l = 0, r = 0;
        int res = 0;
        while (true) {
        	// 先略过不等于1的数
            while (l < nums.length && nums[l] != 1) {
                l++;
            }
            
            // 如果走到末尾了,就退出循环
            if (l == nums.length) {
                break;
            }
            // r从l开始走,略过所有等于1的数
            r = l;
            while (r < nums.length && nums[r] == 1) {
                r++;
            }
            // 记录得到的长度,更新res
            res = Math.max(res, r - l);
            // 让l从r开始继续遍历数组
            l = r;
        }
        
        return res;
    }
}