Skip to content

870. 优势洗牌. (田忌赛马) #6

@crawler-django

Description

@crawler-django

题目描述:
image

思路:

像不像田忌赛马?? 以a最小的牌去对b最大的牌. 先将A数组从小到大排序, B数组也是从小到大排序(但是要保存B原来数组的对应顺序). 然后一一比较A和B, 若大于, 直接取出来, 放在B原来数组的对应位置. 若小于或等于, 则取A数组的最后一个A[end]放入B对应的位置.

代码: (代码最直观)

var advantageCount = function(nums1, nums2) {
    let temp2 = nums2.map((item, index) => {
        return {
            value: item,
            originIndex: index
        }
    })

    temp2.sort((a, b) => {
        return b.value - a.value
    })

    nums1.sort((a, b) => b - a)

    let result = new Array(nums1.length).fill(0)

    // start对应nums1现有的最优马位置,  end对应nums1现有的最劣马位置. i则是nums2数组的迭代索引.
    for (let i = 0, start = 0, end = nums1.length - 1; i < temp2.length; i++) {

        let value1 = nums1[start]
        let value2 = temp2[i].value

        let index = temp2[i].originIndex

        if (value1 > value2) {
            result[index] = value1
            start++
        } else {
            result[index] = nums1[end]
            end--
        }
    }

    return result
};

最后来个跑分截图:(效率100%)
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions