leetcode169. 多数元素

文章整理自lc题解,仅供本蒟蒻复习参考,若涉嫌侵权,请联系本蒟蒻删除。

题目描述

169. 多数元素

解法1 排序

在有序数组中下标为 n / 2 下取整 的元素一定为多数元素。

//解法1:排序法
//时间复杂度 O(n log n)			空间复杂度 O(log n) 
class Solution {
public:
    int majorityElement(vector<int>& nums) {
		sort(nums.begin(), nums.end());
		return nums[nums.size() / 2];
    }
};

解法2 摩尔投票

从第一个数开始 cnt = 1, 遇到相同的就加1,遇到不同的就减1,减到0就换个数重新开始从1计数,最后总能找到最多的那个。

//解法2:摩尔投票 
//时间复杂度O(n)			空间复杂度 O(1) 
class Solution {
public:
    int majorityElement(vector<int>& nums) {
		int candidate = nums[0], cnt = 1;
		for (int i = 1; i < nums.size(); i++) {
			if (candidate == nums[i]) {
				cnt++;
			} else if (--cnt == 0) {
				candidate = nums[i];
				cnt = 1;
			}
		}
		return candidate;
    }
};

你可能感兴趣的:(Algorithms,leetcode,算法)