一.数组(1)485. 最大连续 1 的个数

485. 最大连续 1 的个数

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

示例 1:

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

输入:nums = [1,0,1,1,0,1]
输出:2
 

提示:

1 <= nums.length <= 105
nums[i] 不是 0 就是 1.

前置知识点:

1.不同的赋值方式:var num int =1,var age =20,age :=30

name, age :="Tom", 18

var name string

name :="Tom"

2.for循环语句:for 初始语句;条件表达式;赋值表达式 { 循环体 }

3.if语句:if 表达式1 {

               分支1

      } else if 表达式2 {

               分支2

        } else {

                分支3

       }

4.var 数组变量名 [数组长度]元素类型
  var student [3]string
5.range是Go语言中非常常用的一个关键字,其主要作用就是配合for关键字对数组以及之后会介
绍到的切片和映射等数据结构进行迭代。
for k, v := range num {
 fmt.Println("变量k:", k," ","变量v:", v)
 }
range后接的表达式称为range表达式,本例的range表达式为数组。在迭代时,关键字range会返
回两个值,分别由变量k和v接收。其中k是当前循环迭代到的索引位置,v是该位置对应元素值的一
份副本。
6.匿名变量
在赋值给多个变量时,如果存在不需要接收值的变量,可以使用匿名变量来代替。
a,_ := ReturnData()
7.函数
func 函数名(参数列表) (返回参数列表){
 函数体
}
例如:
1 func add(x int,y int) (sum int) {
02 sum =x+y
03 return sum
04 }
func add(x ,y int) (sum int) {
02 sum =x+y
03 return sum
04 }

力扣官方题解: 

方法一:一次遍历
为了得到数组中最大连续 1 的个数,需要遍历数组,并记录最大的连续 1 的个数和当前的连续 1 的个数。如果当前元素是 1,则将当前的连续 1的个数加 1,否则,使用之前的连续 1 的个数更新最大的连续 1的个数,并将当前的连续 1 的个数清零。

遍历数组结束之后,需要再次使用当前的连续 1 的个数更新最大的连续 1 的个数,因为数组的最后一个元素可能是 1,且最长连续 1的子数组可能出现在数组的末尾,如果遍历数组结束之后不更新最大的连续 1的个数,则会导致结果错误。

代码如下:

func findMaxConsecutiveOnes(nums []int) int {
   cnt, maxcnt := 0, 0
   
   for _, v := range nums{/*第一个存放下标,不需要它,于是用匿名变量存放它,
第二个存放下标对应的值,从第0个位置开始一直遍历到最后*/
       if v == 1{//遇到1计数器加一
           cnt++
       }else{//遇到非1,将统计到的连续1的最大值与当前的最大值进行比较
           maxcnt = max(maxcnt, cnt)
           cnt = 0//连续1的数目归零,再次重新计数
       }
   }
   maxcnt = max(maxcnt, cnt)/*因为当最后一个元素为1时,前面的if分支会进行++操作,
没有与maxcnt进行最后一次的比较,所以再比一次*/
   return maxcnt
}
func max(a, b int)int{//返回两个数的最大值
    if a > b{
        return a
    }
    return b
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值