田忌赛马
将?王和?忌的?按照战??排序,然后按照排名??对?。如果?忌的?能赢,那就?赛,如果赢不了, 那就换个垫底的来送?头,保存实?。
int n = nums1.length; sort(nums1); // ?忌的? sort(nums2); // ?王的? // 从最快的?开始? for (int i = n - 1; i >= 0; i--) { if (nums1[i] > nums2[i]) { // ?得过,跟他? } else { // ?不过,换个垫底的来送?头 } }
实例,力扣870题:
func advantageCount(nums1 []int, nums2 []int) []int {
sort.Ints(nums1)
p:=make([]pair,len(nums2))
for i:=0;i-1{
if nums1[i]>p[j].value{
res[p[j].index]=nums1[i]
i--
}else{
res[p[j].index]=nums1[count]
count++
}
j--
}
return res
}
type pair struct{
index int
value int
}
type pairs []pair
func (t pairs) Len() int {
return len(t)
}
func (t pairs) Swap(i, j int){
t[i], t[j] = t[j], t[i]
}
func (t pairs) Less(i, j int) bool {
return t[j].value > t[i].value
}