田忌赛马


将?王和?忌的?按照战??排序,然后按照排名??对?。如果?忌的?能赢,那就?赛,如果赢不了, 那就换个垫底的来送?头,保存实?。

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 
}