太紧张 上来第一题 没仔细想清楚就做了 结果超时,然后用了第二种方法,过了0.75
第一题
一个只有0和1的数组,拿掉其中任意一个0或者1 ,求连续1最长的个数。
比如 1,1,1 返回2
比如1,1,0,1,0,1 返回3
输入 示例
2// 表示有2条测试样例
3// 表示接下来这条测试样例 包含3个数
1 1 1 // 表示接下来这条测试样例
6// 表示接下来这条测试样例 包含3个数
1 1 0 1 0 1 // 表示接下来这条测试样例
输出样例
2
3
// golang
package main
import "fmt"
func f(arr []int) int {
list := make([]int, 0)
curr := 0
zero := 0
i := 0
for i < len(arr) && arr[i] == 0 {
i++
}
for ; i < len(arr); i++ {
if arr[i] == 0 {
zero++
continue
}
if arr[i] == 1 {
if zero == 0 {
curr++
} else if zero == 1 {
list = append(list, curr)
zero = 0
curr = 1
} else if zero > 1 {
list = append(list, curr)
list = append(list, 0)
zero = 0
curr = 1
}
}
}
list = append(list, curr)
return f2(list)
}
func f2(arr []int) int {
if len(arr) == 1 {
return arr[0] - 1
}
n := len(arr)
res := 0
for i := 1; i < n; i++ {
res = max(res, arr[i-1]+arr[i])
}
return res
}
func max(a, b int) int {
if a < b {
return b
}
return a
}
func main() {
t := 0
fmt.Scan(&t)
for i := 0; i < t; i++ {
a := 0
fmt.Scan(&a)
arr := make([]int, a)
cnt := 0
for j := 0; j < a; j++ {
fmt.Scan(&arr[j])
if arr[j] == 0 {
cnt++
}
}
if cnt == 1 || cnt == 0 {
fmt.Println(a - 1)
continue
}
res := f(arr)
fmt.Println(res)
}
}
第二题 粗略读了一个 感觉是和图相关的 后来没时间做了
全部评论
(0) 回帖