如何使用二进制搜索解决以下问题?

时间:2019-08-30 13:14:57

标签: algorithm binary-search

我们给定了一个整数数组,我们需要找到最小子段的 size ,以便将其删除后数组中的所有元素都是不同的。如何使用O(nlogn)中的二进制搜索解决此问题)?我试图阅读使用二进制搜索的各种提交内容,但我听不懂它们。

我的尝试-我使用蛮力在n ^ 2logn中解决了此问题,但我想知道如何应用二进制搜索在O(nlogn)中解决此问题。

问题链接-https://codeforces.com/contest/1208/problem/B

实现二进制搜索的解决方案之一的链接-https://codeforces.com/contest/1208/submission/59494540

1 个答案:

答案 0 :(得分:0)

在链接的解决方案中,如果可以通过删除大小为check(int siz)的子数组来使所有数字唯一,则函数siz返回true。它是在 O(n)时间内完成的。

由于check(x) == true表示所有check(y) == true的{​​{1}},因此y >= x函数可以进行二进制搜索以找到main()的最小值,其中{ {1}},这就是解决问题的方法。

如果siz,则答案不大于check(siz) == true。如果为check(mid) == true,则答案大于mid

二进制搜索需要check(mid) == false O(log n)个评估,总共需要 O(n log n)个时间。