遍历计数,返回大于n/2的值 update1 既然数的数目超过n/2,那数必然是中位数,排序之后去num[n/2] update2 分治算法,类似快排的思路,见代码
update1
class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(), nums.end()); int n = nums.size(); return nums[n / 2]; }};update2
class Solution {public: int majority(vector<int>& nums, int left, int right) { if (left == right) return nums[left]; int mid = left + ((right - left) >> 1); int lm = majority(nums, left, mid); int rm = majority(nums, mid + 1, right); if (lm == rm) return lm; return count(nums.begin() + left, nums.begin() + right + 1, lm) > count(nums.begin() + left, nums.begin() + right + 1, rm) ? lm : rm; } int majorityElement(vector<int>& nums) { return majority(nums, 0, nums.size() - 1); }};新闻热点
疑难解答