题意
给出一个长度为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])
}
}

京公网安备 11010502036488号