algorithm - 检测数字数组是否具有相同数字的最佳算法

标签 algorithm

算法只需要检测是否有至少2个数字相同。

我图片中的那个是最好的方法还是有更有效的方法。

这是书本上的任务,如果我做对了,我不会拒绝。

算法

enter image description here

最佳答案

如果数组是有序的:

for(int i=0; i<a.length-1; i++)
  if(a[i]==a[i+1])
    return true;
return false;

如果数组没有排序,使用缓存:

boolean[] cache=new boolean[N];
Arrays.fill(cache,false); //set all values to false

for(int i=0; i<a.length; i++)
  if(cache[a[i]])
    return true;
  else
    cache[a[i]]=true; //mark element a[i] as seen
return false;

在上面,N是数组a中出现的最大值。如果 N 未知或非常大,或者您的数组包含负值,请使用映射而不是数组作为缓存。

两种解决方案都在 O(n) 时间内运行。第二种解决方案只需要一个外部缓存来记住我们之前见过的元素。

关于algorithm - 检测数字数组是否具有相同数字的最佳算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46501541/

相关文章:

Python Secret Santa 程序——如何获得更高的成功率

ruby - 如何在 ruby​​ 中生成部分重复的排列?

algorithm - 出现以下复发如何解决?

algorithm - 在面板上放置随机的非重叠矩形

c# - 将较小的 n 维数组放入较大数组的最快方法(二维图形类比 : paint rectangle on canvas)

ruby - 将数组组合成所有可能值组合的数组的单线算法?

java - leetcode 单数 II

algorithm - 计算两个列表之间的相似度

php - 在单词拼写错误的地方打点

ios - 同义词链 - iOS/sqlite 的高效路由算法