【问题标题】:How can I maximize the number of valid indices in the given array?如何最大化给定数组中有效索引的数量?
【发布时间】:2019-12-07 06:38:20
【问题描述】:

我得到了两个大小相同的数组“a”和“b”。

说,数组“a”:{1,5,6,3,2}

说,数组“b”:{2,4,3,2,0}

如果 a[i]>=b[i] ,则索引“i”称为“有效”。

我们的任务是最大化给定数组“a”中有效索引的数量,并返回有效索引的最终数量。

我们只能对数组“a”进行以下操作(任意次数):

1)对于任何 2 个索引,'i' 和 'j',将 a[i] 与 a[j] 交换。

2)不允许对数组-'b'进行任何更改。

上述问题的解决方案:将 a[0] 与 a[4] 交换,我们得到“5”个有效索引。

你可以交换任意次数,任务就是最大化有效索引的数量。

【问题讨论】:

  • @AnkitAgarwal 我需要理论帮助,比如我应该遵循什么方法?
  • 在 Stackoverflow 上解释这一点并不容易。也许您应该咨询可以通过外表更好地解释您的人。
  • @AnkitAgarwal 感谢您的大力帮助。祝你有美好的一天
  • 我认为我在任何时候都没有帮助:)
  • @user3386109 我的贪心算法和你的一样,只是从 'b' 的最大元素开始 :-) 谢谢,问题解决了!

标签: arrays algorithm


【解决方案1】:

这是我想出的算法

  • 识别xb中最大的元素
  • 如果x大于a中的所有元素, 然后将其与a的最小元素配对, 否则将其与a 中不小于x 的最小元素配对。
  • 用剩余的元素继续搜索,直到没有更多的元素可以配对
  • 返回满足 a[i]>=b[i] 的对数

【讨论】:

    【解决方案2】:

    我的想法(未经测试):

    • 对数组a进行排序。
    • 对于b 中的每个元素,进行二分搜索以找到与a 中的当前b[i] 最接近的较大元素。找到后,将它们从列表中删除。您可以为此使用数据结构来改进删除或使用布尔数组来避免被占用的元素。

    对于示例输入:

    "a":{1,5,6,3,2}
    
    "b":{2,4,3,2,0}
    

    排序后的a 将是:

    1 2 3 5 6
    

    所以通过最近最大元素策略,我们得到5作为排列的答案,

     "b":{2,4,3,2,0} 
     "a":{2,5,6,3,1}
    

    【讨论】:

      【解决方案3】:

      考虑贪心算法。 在未标记的nums中,求a的最大值和最小值,如a[m]和a[n],求b的最大值,b[i]。如果 a[m] >= b[i]; valid++ 并交换 a[m] 和 a[i],否则交换 a[n] 和 a[i]。之后,标记 a[i] 和 b[i]。 循环这个直到所有标记。

      【讨论】:

        猜你喜欢
        • 2013-02-07
        • 2017-10-20
        • 1970-01-01
        • 2019-04-12
        • 2018-12-09
        • 2022-11-29
        • 2021-06-03
        • 2012-02-17
        • 1970-01-01
        相关资源
        最近更新 更多