IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode 870 优势洗牌 -> 正文阅读

[数据结构与算法]LeetCode 870 优势洗牌

LeetCode 870 优势洗牌

1.题目描述:

给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。
返回 A 的任意排列,使其相对于 B 的优势最大化。

示例 1:

输入:A = [2,7,11,15], B = [1,10,4,11]
输出:[2,11,7,15]

2.题解:

方法:贪心算法

  1. 对A,B数组从小到大排序,对B数组仅使用下标排序,不能破坏原始顺序
  2. 在B数组上定义,l, r ,初始时 l = 0,r = n-1。如果A[i] > B序号最小的数, 就这样安排,否则,就将A安排B中最大的数。
  3. 贪心的正确性是 A 中的每个数字都要尽可能的干掉 B 中的一个数字,如果干不掉,则消耗掉 B 中剩余最大的数字。

时间复杂度:O(N log N);
空间复杂度:O (N)。

C++:

class Solution {
public:
    vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {
        int n = nums1.size() ;
        sort(nums1.begin(), nums1.end());
        vector<int>id(n) ;
        // 对nums2数组 进行序号排序
        for (int i =0 ;i < n ;i++) id[i] = i ;
        sort(id.begin(), id.end(), [&](int a, int b) {
            return nums2[a] < nums2[b] ;
        }) ;
        vector<int> res(n) ;
        int  l =0 , r = n-1 ;
        for (auto x : nums1) {
            if (x > nums2[id[l]]) res[id[l++]] = x ; 
            else res[id[r--]] = x ;
        }
        return res ;
    }
};

Golang:

type value_index struct {
    value int
    index int
}
func advantageCount(A []int, B []int) []int {
    sort.Ints(A)
    n := len(A)
    b_val_idx := make([]value_index, n)
    for i, val := range B {
        b_val_idx[i].value = val
        b_val_idx[i].index = i
    }
    sort.Slice(b_val_idx[:], func(i, j int) bool{
        return b_val_idx[i].value > b_val_idx[j].value
    })
    lo, hi := 0, n-1
    res := make([]int, n)
    for _, v := range b_val_idx {
        idx, val := v.index, v.value
        if A[hi] > val {
            res[idx] = A[hi]
            hi--
        } else {
            res[idx] = A[lo]
            lo++
        }
    }
    return res
}

原题:优势洗牌

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:36:29  更:2021-10-28 12:38:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:26:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码