面试题 17.10. 主要元素
Posted 数据结构和算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 17.10. 主要元素相关的知识,希望对你有一定的参考价值。
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
public int majorityElement(int[] nums) {
//边界条件判断,如果数组为空就返回-1
if (nums == null || nums.length == 0)
return -1;
//先找出主要元素
int major = nums[0];
int count = 1;
for (int i = 1; i < nums.length; i++) {
if (major == nums[i]) {
//如果当前元素等于major,count就加1
count++;
} else {
//否则count就减1,
count--;
if (count < 0) {
//如果count小于0,说明前面的
//全部抵消了,这里在重新赋值
major = nums[i];
count = 1;
}
}
}
//下面是判断主要元素是否存在
count = 0;
int half = nums.length >> 1;
for (int num : nums) {
if (major == num)
if (++count > half)
return major;
}
return -1;
}
时间复杂度:O(N)
,两个for
循环,不是嵌套的。
空间复杂度:O(1)
,使用了两个变量。
以上是关于面试题 17.10. 主要元素的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode面试题 17.10. 主要元素/最优二叉树II(树形DP)/NC73数组中出现次数超过一半的数字/229. 求众数 II/NC134股票(无限次交易)/NC114旋转字符串