给定长度为n的排序数组,请在数组中查找出现大于或等于n / 2次的数字。可以肯定的是,这样的元素总是存在的。
例子:
Input : 2 3 3 4
Output : 3
Input : 3 4 5 5 5
Output : 5
Input : 1 1 1 2 3
Output : 1
为了找到该数字,我们遍历数组,并检查数组中每个元素的频率是否大于或等于n / 2,但它需要额外的空间,并且时间复杂度将为O(n)。
但是我们可以看到,如果排序数组中存在大于或等于n / 2次的数字,则该数字必须出现在位置n / 2处,即a [n / 2]。
C++
// C++ code to find majority element in a
// sorted array
#include
using namespace std;
int findMajority(int arr[], int n)
{
return arr[n / 2];
}
int main()
{
int arr[] = { 1, 2, 2, 3 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << findMajority(arr, n);
return 0;
}
Java
// Java code to find majority element in a
// sorted array
public class Test {
public static int findMajority(int arr[], int n)
{
return arr[n / 2];
}
public static void main(String args[])
{
int arr[] = { 1, 2, 2, 3 };
int n = arr.length;
System.out.println(findMajority(arr, n));
}
}
Python 3
# Python 3 code to find
# majority element in a
# sorted array
def findMajority(arr, n):
return arr[int(n / 2)]
# Driver Code
arr = [1, 2, 2, 3]
n = len(arr)
print(findMajority(arr, n))
# This code is contributed by Smitha.
C#
// C# code to find majority element in a
// sorted array
using System;
public class GFG {
public static int findMajority(int []arr, int n)
{
return arr[n / 2];
}
// Driver code
public static void Main()
{
int []arr = { 1, 2, 2, 3 };
int n = arr.Length;
Console.WriteLine(findMajority(arr, n));
}
}
// This code is contributed by vt_m.
PHP
Javascript
输出:
2