题目描述
如果一个数大于一半,这个数最后的数量肯定大于其他所有数的数量之和。
样例
class Solution {
public:
int moreThanHalfNum_Solution(vector<int>& nums) {
int count = 1, val = nums[0];
for (int i = 1; i < nums.size(); i ++) {
if (nums[i] == val) count++;
else count--;
if (count == 0)
{
val = nums[i];
count = 1;
}
}
return val;
}
};
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
# 我真的服了
天才啊
牛
摩尔投票
牛皮
你们写代码都不写输输入函数吗
$x_a$
如果那个数字刚好是数组的一半,最后的count 为0,但是val是最后一个数,最后一个数可能不是我们要求的数,这样的话,返回的val是错的,比如1,1,1,2,3,4,最后到计算完4,count为0,val变为4,返回的就是4了
题目说超过一半了,不存在刚好一半的情况
最后再加一个判断,判断次数是否大于一半,不超过返回0
请问大神这种方式空间复杂度是$O(1)$么?
sort基于快排,大概是$O(nlogn)$.
那空间复杂度呢?
快排递归实现,空间$O(logn)$.
谢谢大神的解惑,★,°:.☆( ̄▽ ̄)/$:.°★ 。
一模一样。。。。但是不符合时空要求