当前位置: 首页 > 面试题库 >

编程测试-协调性-支配者

轩辕欣可
2023-03-14
问题内容

我刚刚遇到了一个Codility问题,这给我带来了困难,但我仍在尝试弄清楚如何才能满足空间和时间复杂性的限制。

问题如下:数组中的主要成员是占据数组中一半以上位置的成员,例如:

{3,67,23,67,67}

67是主要成员,因为它在数组中以3/5(> 50%)的位置出现。

现在,您将期望提供一种方法,该方法接受一个数组并返回一个占主导地位的成员(如果存在)的索引,如果不存在则返回-1。

容易吧?好吧,如果不是因为以下限制,我本可以轻松解决问题:

  • 预期时间复杂度为O(n)
  • 预期空间复杂度为O(1)

我可以看到如何解决O(n)时间复杂度为O(n)的时间以及O(n ^ 2)时间复杂度为O(1)的问题,但又不能同时满足O(n)时间的问题和O(1)空间。

我真的很感激看到这个问题的解决方案。不用担心,截止日期已经过了几个小时(我只有30分钟),所以我不打算作弊。谢谢。


问题答案:

用BFPRT找到中位数,也就是中位数的中位数(O(N)时间,O(1)空间)。然后扫描整个数组-
如果一个数字占主导地位,则中位数将等于该数字。遍历数组并计算该数目的实例数目。如果超过数组的一半,那就是主导者。否则,没有统治者。



 类似资料:
  • 使用Swoole协程时,可以使用下面的方法进行调试 GDB调试 进入 gdb gdb php test.php gdbinit (gdb) source /path/to/swoole-src/gdbinit 设置断点 例如 co::sleep 函数 (gdb) b zim_swoole_coroutine_util_sleep 打印当前进程的所有协程和状态 (gdb) co_list coro

  • VS Code 把 NodeJS 和 Mono 的调试功能抽象出来了,大家就可以通过自定义 Debugger Adapter 和 VSCode Debug Protocol 从而实现自己的调试器。现在 VS Code 插件中心 里,Go、PHP、Python、Ruby 的 Debugger 做的都比较成熟了 参见 https://code.visualstudio.com/Docs/extensi

  • 在底层,Chrome 开发者工具是用 HTML,JavaScript 和 CSS 写的 Web 应用程序。在 Javascript 运行时,它提供一个特殊的绑定,这允许它与 chrome 网页进行交互并且容许装载它们。交互协议包括被发送到页面的命令,和该页面生成的事件。尽管 Chrome 开发者工具是该协议的主要客户,其中包括远程调试(remote debugging),但有很多办法可以让第三方能

  • <?php use Yurun\Util\YurunHttp; use Yurun\Util\HttpRequest; // 设置默认请求处理器为 Swoole YurunHttp::setDefaultHandler(\Yurun\Util\YurunHttp\Handler\Swoole::class); // Swoole 处理器必须在协程中调用 go('test'); functio

  • 我已经玩了很长时间的Firebase远程配置。在某些情况下,我设置了参数,以不同的值应用于我的用户基础的特定%。 最近,我开始对正确的a/B测试感兴趣,并看到Firebase有一个用于此的特性(现在在beta版)。在对A/B测试特性的描述中,他们陈述了一个用例是通过远程配置设置参数来改变应用程序的行为(这是有意义的,直到现在我都是这么做的)。 不过,我的问题是A/B测试特性是否做了与远程配置不同的

  • 22.13.2.调试 测试任务提供了Test.getDebug()属性,可使JVM等待调试器附加到5005端口后在进行调试. 通过调用--debug-JVM任务选项,这也可以启用调试任务(since Gradle1.12)。