首页 > 阿里3.25笔试题 0.75+0

阿里3.25笔试题 0.75+0

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

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐