该题因为涉及到计数问题,所以一定是可以用哈希表解决的。
优化方法是使用摩尔投票法,
我们假设当前的数即为众数并且权重加一,之后如果不相等则权重减一,权重为0时重新定义当前数为众数,重复前面的操作。因为众数的个数是大于数组的一半的,所以无论怎么去操作,最后权重一定是大于0的,一定可以找到众数。
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
var vote = 0,x;
for(var i of nums){
if(vote == 0)x = i;
if(x == i)vote+=1;
else vote-=1;
}
return x;
};
使用了常数变量来存储结果,空间复杂度为1,而哈希表为n
该题不允许使用除法除以当前的数来获取其他数的乘积,如果使用暴力方法时间复杂度为0
(n),不会ac。
构建两个乘积数组,一个是left表示当前下标为i的左边所有数的乘积,right为右边所有数的乘积。
最开始时建立两个数组,利用fill方法赋值每