题目:
给定一个int数组,代表每个选手的能力值,给定一个整数n,当两个选手能力值相差你的时候,可以组成异常比赛,求最多能组成机场比赛
分析:
动态规划,贪心
package main
import(
"fmt"
)
//[1,1,2,3,3,4,5,7]
func maxrace(list []int,n int){
fmt.Println(list)
// tmp:=""
right:=0
count:=0
for k,_:=range(list){
right=k+1
//把配到对的元素直接标称-999,当遇到-999的时候说明这个index的元素已经配过对了 , 或者k等于最后一个元素的时候跳出,/直接下一个
if list[k]==-999 || k>=len(list)-1 {
continue
}
//从k开始,往右遍历,直到遇到差为k的元素停止
for right<len(list)-1 && (list[right]-list[k]!=2 || list[k]-list[right]!=-2) {
right+=1
}
//跳出for循坏有两种结果,1找到合适的搭配,2没有找到,所以这里判断是结果1还是结果2,找到将这个元素标为-999
if (list[right]-list[k]==2 || list[k]-list[right]==-2){
list[right]=-999
count+=1
}
}
fmt.Println(list)
fmt.Printf("最多能组成 %v 场比赛" ,count)
}
func main(){
list:=[]int{1,1,2,3,3,4,5,7,9,9,11,11}
maxrace(list,2)
}
我这里标记元素用没用过是把它标成一个数组里不可能出现的数 比如-999