力扣每日一题Day05摩尔投票
我从失败走向成功。
题目描述:
给定一个大小为 n
的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
解题代码:
1 | class Solution { |
解读与收获:
这个求解思路其实和求解众数(一组数据中出现次数最多的数)但题目是找出出现次数大于n/2的数(多数元素),只能说多数元素一定是众数,而众数不一定是多数元素,但题目说假设一定会有多数元素,所以用这种方法也可以求出题解。
将一个数组排序,中位数一定是众数。
在评论区看到了一个很有意思的解法,叫摩尔投票,代码如下:
1 | class Solution { |
n为目前假设的多数元素的值,votes是“票数”,遍历数组,当数组元素等于我们假设的多数元素,那就给票数+1,如果等于则-1,因为多数元素的数量一定大于数组长度的一半,所以其他元素的票数是不可能大于多数元素的,即-1的数量会小于+1,而对于错误的假设,最终votes一定会变成0,然后会假设新的元素为多数元素。
- 时间复杂度 O(N)O(N)*O*(*N*) : NNN 为数组
nums
长度。 - 空间复杂度 O(1)O(1)*O*(1) :
votes
变量使用常数大小的额外空间。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 驴の奇思妙想!
评论