【问题标题】:Sorted list of strings? Find length of list without using length function排序的字符串列表?不使用长度函数查找列表的长度
【发布时间】:2011-10-17 16:04:19
【问题描述】:

给定一个排序的字符串列表,最后一个条目为空。您不能使用 list.length 来确定列表的长度,而是使用比 O(n) 更有效的方法来查找列表的结束索引或列表的长度?

【问题讨论】:

  • 闻起来像家庭作业。你都尝试了些什么? Stack Overflow 社区乐于提供帮助,但从不给出答案。
  • 家庭作业有机会吗?我们允许使用什么
  • @Nico,我们一直在给出答案。
  • “一种比 O(n) 更有效的方法”在英语中没有任何意义。你的意思是? “和一样高效”、“至少和一样高效”、“比”更有效率等等。
  • @Nico 没有 A 的问答网站将一文不值 ;)

标签: java string sorting


【解决方案1】:

又快又脏,但它应该可以完成任务。

这就像猜数字一样。从一个任意大的数字开始。

  1. 当密钥存在时,加倍。抛出 IndexOutOfBounds 后,继续执行第二步。
  2. 该索引是否存在?
    • 是的,然后将当前索引上方的下一个已知数字之间的差减半并添加到当前索引中。
    • 没有?然后将当前索引下方的下一个已知数字与当前索引之间的差减半。

好消息?这是 O(logn)。坏消息?您有可能出现 logn/2 异常。

【讨论】:

  • 这听起来像它的 O(logn),其中 n = 任意数字,而不是列表的大小。
  • 从索引 1 开始,如果找到非空条目则加倍。这样它将是 O(log(n)) 其中 n = 列表大小。
  • 从索引 0 或 1 开始,如果是 LinkedList,则加倍可能会很慢:每个“get”调用都是 O(N)。 (ArrayList.get 是 O(C),其中“C”是一个常数。)从 Integer.MAX_VALUE 向下的二分搜索可能会遇到同样的问题,因为每个“命中”都会很昂贵。
  • 但它不是链表,是字符串或chr[]。
【解决方案2】:

听起来像家庭作业。

查看 List.iterator() 和 Iterator 接口。

【讨论】:

    【解决方案3】:

    使用二分搜索会给你 O(logn)

    所以只需搜索空条目:)

    【讨论】:

    • 那么,如果你不能使用长度属性,你从哪里开始搜索?
    • 你是对的。我没有想到。所以我想既然你必须从第一个元素开始,你根本就不能使用二分搜索吗?
    • 你仍然可以做到。我不喜欢这几乎可以肯定是一个家庭作业问题,所以我不会在这里发布答案,但如果你好奇并且无法弄清楚,请给我发个便条:) 编辑:看起来像某人确实发布了我正在考虑的方法。哦,好吧...
    【解决方案4】:

    简单:使用“List.size()”方法。 Java 'List' 接口没有“长度”字段或属性。

    ;->

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 2020-07-03
      • 2020-06-28
      • 2018-02-23
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多