[R50A]缺失的数
- 难度 入门
- 时限 1s
- 空限 512m
- 模拟
数据规模:,剩余的 个数字互不相同且均在 到 之间。
思路
原数组是 ,被删除了 个数。题目要求找出这些被删除的数并按升序输出。
开一个布尔数组 ,初始全为 ,把给定的 个数对应的下标标记为 。随后从 到 顺序扫描,凡是 的 就是缺失的数,自然按升序得到,直接输出即可。
复杂度
时间 ,空间 。
仓颉实现
import std.env.*
import std.convert.*
main(): Int64 {
let reader = getStdIn()
let v = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
let n = v[0]
let x = v[1]
let a = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
let present = Array<Bool>(Int64(n) + 1, { _ => false })
for (val in a) {
present[Int64(val)] = true
}
let sb = StringBuilder()
var first = true
var i = Int64(1)
while (i <= n) {
if (!present[i]) {
if (!first) {
sb.append(" ")
}
sb.append(i)
first = false
}
i++
}
println(sb.toString())
return 0
}