我得到了一个n个整数值和一个整数x的排序数组。查找x出现在此数组中的次数最有效的算法是什么?
我想到二进制搜索,当我到达x然后我左右分开以查看是否有更多的x添加到我的计数中,但我想知道是否有任何其他解决方案。
答案 0 :(得分:2)
好吧,如果数组中x
的出现次数与数组的长度相比可以认为是常量,那么你的二进制搜索方法会给你一个O(log(N)
算法,你可以& #39; t做得更好。
但是,例如,如果数组的所有元素都是x
,或者一半元素是x
,那么算法的第二部分(split left and right to see if there is more x to add to my count
)将采用线性时间。
如果使用另外两个二进制搜索来查找数组中第一个x和最后一个x的索引,则可以避免这种情况。你可以这样做,例如,在x-1和x + 1上运行二进制搜索(假设这是一个int数组)。
无论数组中有多少x
,这都会给你O(log(N))运行时间。
答案 1 :(得分:0)
它的整数和列表已排序。
使用拆分搜索算法,在索引处拆分:
indexToSplit = (int) x*(an - a1)/n
其中:
x is your integer to find
an is the last integer in the list
a1 is the first integer in the list
n is the size of the list
假设您的列表从最低到最高排序
这是一种启发式,可以优于二进制排序,但取决于列表中整数的均匀分布情况
答案 2 :(得分:-1)
这应该有用。
public class Numbers{
public static void main(String[] args){
int[] x = new int[]{1,2,3,4,8,7,6,7,7,7,5};
int number = 0;
for (int i = 0; i < x.length; i++){
if (x[i] == n){
number++;
}
}
System.out.println(number);
}
}
x - 数组标题;
n - 您提到的x
整数。