思科笔试-软开(Golang):比赛

时间没安排好,最后因为边界问题,提交的代码也没通过用例成功。结束五分钟后,才调成功,以下代码仅供参考,还不知道会不会超内存。求Go的工作!!!
package main

import "fmt"

func main() {
	var n, m int
	fmt.Scan(&n, &m)
	temp := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&temp[i])
	}
	flag := 0
	maxIndex := findMax(temp, n)
	// fmt.Println(maxIndex)          // 输出测试
	solve(temp, maxIndex, m, n, flag) // n+1 为A, n+2为B
	for i := 0; i < n; i++ {
		if temp[i] == n+1 {
			fmt.Print("A")
		} else {
			fmt.Print("B")
		}
	}
}

func solve(temp []int, index, m, n, flag int) {
	if index == 111111 {
		return
	}
	count := m
	// fmt.Println(index) // 输出测试
	// fmt.Println(temp) // 输出测试
	tempIndex := index
	for tempIndex >= 0 && count >= 0 { // 这里count不能大于0,要大于等于0。index>=0
		if temp[tempIndex] <= n {
			temp[tempIndex] = n + flag + 1
			tempIndex--
			count--
		} else {
			tempIndex--
		}
	}
	count = m
	tempIndex = index + 1
	for tempIndex < n && count > 0 { // 右边就不能count再多一次了
		if temp[tempIndex] <= n {
			temp[tempIndex] = n + flag + 1
			tempIndex++
			count--
		} else {
			tempIndex++
		}
	}
	if flag == 0 {
		flag = 1
	} else {
		flag = 0
	}
	maxIndex := findMax(temp, n)
	solve(temp, maxIndex, m, n, flag)
}

func findMax(temp []int, n int) int { // 返回数组中最大值所在的位置
	mt := 0
	res := 111111
	for i := 0; i < len(temp); i++ {
		if temp[i] <= n && temp[i] > mt {
			mt = temp[i]
			res = i
		}
	}
	return res
}

测试用例:
输入:
10 2
4 8 9 10 7 6 5 3 2 1
输出:
BAAAAABBBA

输入:
7 1
3 6 1 7 2 5 4
输出:
BBAAABA
#思科#
全部评论
我投的go但是用python写的 用个堆存数字 然后模拟 直接A了
点赞 回复 分享
发布于 2022-09-20 23:56 湖北
我用的哈希表存下标,循环找最大值,取出下标,然后将最大值归0,然后m次循环找左右的,遇到0跳过,边界跳出,过了0.9,然后超时, 完事越优化,准确率越低
点赞 回复 分享
发布于 2022-09-20 23:30 山西

相关推荐

06-23 11:28
门头沟学院 Java
牛客91966197...:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
昨天 12:25
重庆大学 C++
到底要什么样的学历才配进呢
投递速腾聚创等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务