题目:数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。
示例 1:
输入:[1,2,5,9,5,9,5,5,5]
输出:5
示例 2:
输入:[3,2]
输出:-1
示例 3:
输入:[2,2,1,1,1,2,2]
输出:2
说明:
你有办法在时间复杂度为 O(N),空间复杂度为 O(1) 内完成吗?
思路:这道题的解法非常巧妙,将其排序后从数组首位到中间位置对其nums[i]与nums[i+length/2]进行验证,若存在相等情况,则存在“主要元素”,反之,无“主要元素”。
核心代码:
sort(nums.begin(), nums.end());
for (int i = 0; i < (nums.size()+1) / 2 ; i++)
if (nums[i] == nums[i + nums.size()/2])
return nums[i];