func closestRoom(rooms [][]int, queries [][]int) []int {
}
先将rooms排序,从大到小。例如我们找面积大于等于4的数组就不用全部遍历,而是有退出条件
遍历需求queries,如果符合条件就对比ID绝对值。
const maxPreferred = 1_000_0000 + 1
func closestRoom(rooms [][]int, queries [][]int) []int {
// 从大到小 排序
slices.SortFunc(rooms, func(i, k []int) int { return k[1] - i[1] })
n := len(queries)
ans := make([]int, n)
for ansI, q := range queries {
// _ = q[0] // id
// _ = q[1] // 最小面积
minID := maxPreferred // 这里记录最小的ID差值
for i := 0; i < len(rooms) && rooms[i][1] >= q[1]; i++ {
// rooms[i][0] = 房间ID
// rooms[i][1] = 房间面积
idGap := abs(rooms[i][0] - q[0])
if minID > idGap {
minID = idGap
ans[ansI] = rooms[i][0]
} else if minID == idGap { // 如果差相同 选小的ID
ans[ansI] = min(ans[ansI], rooms[i][0])
}
}
if minID == maxPreferred {
ans[ansI] = -1 // 默认为-1
}
}
return ans
}
func abs(a int) int {
if a < 0 {
return -a
}
return a
}
loommii