【问题标题】:O(n) linear search of an array for most common itemsO(n) 线性搜索最常见项目的数组
【发布时间】:2018-04-23 02:41:50
【问题描述】:

我正在尝试为 O(n) 算法编写伪代码,该算法在已排序的数组中搜索最常出现的元素。

对数据结构和算法非常陌生,我已经有大约 2 年半没有编码了。我已经围绕这个主题做了一些阅读,我相信我掌握了这些概念,但我正在努力解决上述问题。

这就是我到目前为止所拥有的,我正在努力在没有第二个“for”循环的情况下获得所需的结果,这使得算法成为 O(n^2) 我相信而且我不确定我会如何处理具有多个频繁出现的元素。

任何关于我可以在哪里获得帮助的帮助或指导将不胜感激。

 A=[i];
 Elem=0; 
 Count=0;
 For (i=0; j< A[n-1]; j++);
      tempElem=A[j];
      empCount=0;
      for(p=0; p<A[n-1; p++])   
          If(A[p]==tempElem)
             tempCount++:
      if(tempCount>Count);
        Elem==tempElem:
        Count=tempCount;
 Print(“The most frequent element of array A is”: Elem “as it appears” Count “times”)

【问题讨论】:

  • 提示:如果数组已经排序,你为什么要从 0 开始 p?如果您知道数组已经排序,那么您就知道相似的项目将始终彼此相邻。

标签: arrays algorithm sorting search big-o


【解决方案1】:

内循环不是你的朋友。 :-)

你的循环体应该只关注两个逻辑:

  1. 这个元素和前一个元素一样吗?

    如果是这样,增加当前项目的计数 (curr_count) 并转到下一个元素。

  2. 否则,请检查 curr_count 与迄今为止最好的。如果更好,则制作上一个元素并计算新的“最佳”数据。

    无论哪种方式,将计数设置回 1 并转到下一个元素。

【讨论】:

  • 很好,简洁,解决方案的描述。
猜你喜欢
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多