给定一个二进制数组 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
}