前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 题目870-优势洗牌(田忌赛马)

Leetcode 题目870-优势洗牌(田忌赛马)

作者头像
用户6021899
发布2022-11-18 14:04:36
3480
发布2022-11-18 14:04:36
举报

链接:870. 优势洗牌 - 力扣(LeetCode)

解答来自 力扣用户 灵茶山艾府

田忌赛马(Python/Java/C++/Go) - 优势洗牌 - 力扣(LeetCode)

Python:

代码语言:javascript
复制
class Solution:
    def advantageCount(self, nums1: List[int], nums2: List[int]) -> List[int]:
        n = len(nums1)
        ans = [0] * n #初始化一个长度为n的数组
        nums1.sort()
        ids = sorted(range(n), key=lambda i: nums2[i])
        left, right = 0, n - 1
        for x in nums1:
            if x > nums2[ids[left]]:
                ans[ids[left]] = x  # 用下等马赢下等马
                left += 1
            else:
                ans[ids[right]] = x  # 用下等马消耗上等马
                right -= 1
        return ans

C++:

代码语言:javascript
复制
class Solution {
public:
    vector<int> advantageCount(vector<int> &nums1, vector<int> &nums2) {
        int n = nums1.size(), ids[n];
        vector<int> ans(n);
        sort(nums1.begin(), nums1.end());
        iota(ids, ids + n, 0); // 给定 地址范围,和 初值,给这个范围赋值,步长为1
        //sort(起始地址,结束地址,比较器cmp) 。给 nums2 的索引 按 nums2元素的大小从小到大排序
        //[&](int i, int j) { return nums2[i] < nums2[j]; } 是lambda 形式的cmp。< 则为升序
        sort(ids, ids + n, [&](int i, int j) { return nums2[i] < nums2[j]; }); 
        
        int left = 0, right = n - 1;
        for (int x : nums1) // vector遍历
            ans[x > nums2[ids[left]] ? ids[left++] : ids[right--]] = x;
        return ans;
    }
};

iota()函数的原型

代码语言:javascript
复制
template <class ForwardIterator, class T>
  void iota (ForwardIterator first, ForwardIterator last, T val)
{
  while (first!=last) {
    *first = val;
    ++first;
    ++val;
  }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档