力扣485题:最大连续1的个数

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

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

难度:简单。

算法思路:1、暴力,2.双指针(也可以说是滑动窗口)
三种算法的复杂度都是一致的,通过这个题主要是为了学会双指针的用法,

双指针:
将两个指针比作一个窗口,通过移动指针的位置改变窗口的大小,观察窗口中的元素是否符合题意。

  • 初始窗口中只有数组开头一个元素。
  • 当窗口中所有元素为 1 时,右指针向右移,扩大窗口。
  • 当窗口中存在 0 时,计算连续序列长度,左指针指向右指针。

注意实现双指针的时候边界的问题。

时间复杂度为O(n),空间复杂度为O(1);

public static int findMaxConsecutiveOnes(int[] nums){
	int result = 0;
	int left = 0;
	int right = 0;
	while(right < nums.length){
		if(nums[right++] == 0){
			result = Math.max(result, right - left - 1);
			left = right;
		}
	}
	return Math.max(result, right-left);
}

你可能感兴趣的:(力扣算法题,算法,leetcode,数组,双指针)