C++程序 在已排序的数组中检查多数元素
问题: 编写一个函数来查找给定整数x是否出现在n个整数的已排序数组中超过n/2次。
基本上,我们需要编写一个函数,称为isMajority(),它将一个数组(arr[]),一个数组的大小(n)和要搜索的数字(x)作为参数,并在x出现超过n/2次时返回true。
例子:
输入:arr[] = {1, 2, 3, 3, 3, 3, 10},x = 3
输出:True(在给定的数组中x出现的次数超过n/2)
输入:arr[] = {1, 1, 2, 4, 4, 4, 6, 6},x = 4
输出:False(在给定的数组中x没有出现超过n/2次)
输入:arr[] = {1, 1, 1, 2, 2},x = 1
输出:True(在给定的数组中x出现的次数超过n/2)
METHOD 1 (Using Linear Search)
线性搜索元素的第一次出现,查找到它(假设在索引i),检查在索引i + n/2处的元素。如果在i+n/2处存在元素则返回1,否则返回0。
输出:
时间复杂度: O(n)
辅助空间: O(1)
因为使用的是常量额外的空间。
METHOD 2 (Using Binary Search)
使用二进制搜索方法找到给定数字的第一次出现。这里二进制搜索的条件很重要。
输出:
时间复杂度: O(对数n)
辅助空间: O(1)
由于使用了常量额外空间。
算法范式: 分治
方法3: 如果已经给出数组已排序且存在多数元素,则检查特定元素是否与检查的中间元素相同。
因为多数元素在数组中出现次数超过n / 2次,所以它将始终是中间元素。我们可以使用这个逻辑检查给定的数字是否是多数元素。
输出
时间复杂度 : O(1)
辅助空间: O(1)