package main import ( "bufio" "fmt" "os" "strconv" ) func main() { for { scanner := bufio.NewScanner(os.Stdin) // 设置大缓冲区,防止大输入时出错 buf := make([]byte, 1024*1024) // 1MB scanner.Buffer(buf, 1024*1024) scanner.Split(bufio.ScanWords) // 按单词扫描(空格、换行等分隔) // 读取第一行:n scanner.Scan() n, _ := strconv.Atoi(scanner.Text()) if n == 0 { break } arr := make([]int, n) for i := 0; i < n; i++ { scanner.Scan() arr[i], _ = strconv.Atoi(scanner.Text()) } fmt.Println(process(arr)) } } // func process(arr []int) int { // n := len(arr) // hash := make([]int, n) // for i := 0; i < n; i++ { // if arr[i] >= 1 && arr[i] <= n && hash[arr[i]-1] == 0 { // hash[arr[i]-1] = arr[i] // } // } // for i := 0; i < n; i++ { // if hash[i] != i+1 { // return i + 1 // } // } // return n + 1 // } func process(arr []int) int { n := len(arr) for i := 0; i < n; i++ { // 原地哈希做法 for arr[i] >= 1 && arr[i] <= n && arr[arr[i]-1] != arr[i] { j := arr[i] - 1 arr[j], arr[i] = arr[i], arr[j] } } for i := 0; i < n; i++ { if arr[i] != i+1 { return i + 1 } } return n + 1 }