已知一个整数序列 A =(a 0 ,a 1 ,..., a n-1 ) , 其中0≤ai<n(0≤i<n)。 若存在a p1 =a p2 =...=a pm =x且m>n/2(0≤p k <n,1≤k≤m),则称 x 为 A 的主元素。 例如A= ( 0, 5, 5, 3, 5, 7, 5, 5 ),则 5 为主元素;又如 A= ( 0, 5, 5, 3, 5, 1, 5, 7 ), 则A 中没有主元素。假设 A 中的 n 个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出 A 的主元素。若存在主元素, 则输出该元素;否则输出-1。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++或 Java 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。