15天大厂真题带刷 - ZT17小欧安排座位 | Go

小欧安排座位

https://www.nowcoder.com/practice/f90a4314d03f434f93f54b918304f97e

题意

给出一个长度为n的字符串,请构造一个数组,具体要求如下:

  • 当这一位是1时,要求 a[i]=i
  • 当这一位是0是,要求 a[i]!=i

尽可能多的满足要求

思路

先把所有字符串里是0的位置填上a[i]=i,并且记录下字符串里1的位置的数值tmp。

再填字符串里是1的位置的时候,可以考虑每一个元素都等于tmp数组的下一个元素,这样可以尽量满足a[i] != i

Go代码

package main

import "fmt"

func main() {
	var n int
	var s string
	fmt.Scan(&n, &s)
	//第i个表示第i个小朋友的位置 1表示独特 不相等;0表示不独特,相等
	a := make([]int, n)
	tmp := make([]int, 0, n)
	for i := 0; i < n; i++ {
		if s[i] == '0' {
			a[i] = i + 1
		} else {
			tmp = append(tmp, i+1)
		}
	}
	idx := 0
	for i := 0; i < n; i++ {
		if s[i] == '1' {
			if idx+1 < len(tmp) {
				a[i] = tmp[idx+1]
			} else {
                idx = 0
				a[i] = tmp[idx]
			}
            idx++
		}
	}
	for i := 0; i < n; i++ {
		fmt.Printf("%d ", a[i])
	}
}

#牛客创作赏金赛#
15天大厂真题带刷Go题解 文章被收录于专栏

15天大厂真题带刷Golang题解

全部评论

相关推荐

03-24 16:56
已编辑
肇庆学院 后端
一天代码十万三:你看看人家进大厂的简历就知道了,你这个学历得acm+大厂实习+熟悉底层+运气很好 才有可能进某个大厂,因为大部分是直接卡学历的
投递快手等公司10个岗位
点赞 评论 收藏
分享
自由水:这HR已经很好了,多的是已读不回和不读了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务