力扣【485-最大连续1的个数】【数组-C语言】

题目:力扣-485

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

方法1: 遇到连续的1就累加和sum,遇到0时,用max先记录当前最小连续1的个数,然后置sum=0,重新开始累计,若给定二进制数组是以1为最后一个元素,则程序最后再次更新max

int findMaxConsecutiveOnes(int* nums, int numsSize) {
    int sum = 0, max = 0;
    for (int i = 0; i < numsSize; i++) {
        if (nums[i] == 1) {
            sum++;
        } else {//遇到0,sum要归0之前先保存最大连续1的个数
            if (sum > max)
                max = sum;
            sum = 0;
        }
    }
    if (sum > max)
        max = sum;
    return max;
}

时间复杂度O(n)

方法2:双指针

int findMaxConsecutiveOnes(int* nums, int numsSize) {
	int i,j,max=0;
	i=j=0;
	while(i<numsSize){
		if(nums[i]==1){
			i++;
			max=Max(i-j,max);//Max返回两者中较大的数(略)
		}else{
			i++;
			j=i;
		}	
	}
	return max;
}

时间复杂度:O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值