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

相关推荐

醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务