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