太紧张 上来第一题 没仔细想清楚就做了 结果超时,然后用了第二种方法,过了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) 回帖