2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k,如果两个人能力差值正好为k,那么可以凑在一起比赛。一局比赛只有两个人,返回最多可以同时有多少场比赛。
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k,如果两个人能力差值正好为k,那么可以凑在一起比赛。一局比赛只有两个人,返回最多可以同时有多少场比赛。
福大大 答案2021-06-23:
时间紧,思路见代码。
代码用golang编写。代码如下:
package main
import (
"fmt"
"sort"
)
func main() {
arr := []int{1, 2, 3, 4, 5, 6, 7, 8}
ret := maxPairNum2(arr, 2)
fmt.Println(ret)
}
// 时间复杂度O(N*logN)
func maxPairNum2(arr []int, k int) int {
if k < 0 || len(arr) < 2 {
return 0
}
sort.Slice(arr, func(i, j int) bool {
return arr[i] <= arr[j]
})
ans := 0
N := len(arr)
L := 0
R := 0
usedR := make([]bool, N)
for L < N && R < N {
if usedR[L] {
L++
} else if L >= R {
R++
} else { // 不止一个数,而且都没用过!
distance := arr[R] - arr[L]
if distance == k {
ans++
usedR[R] = true
R++
L++
} else if distance < k {
R++
} else {
L++
}
}
}
return ans
}
执行结果如下:
公众号:福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具