有关数学的算法题(摩尔投票,贪心算法,滑动窗口双指针)

剑指 Offer 39. 数组中出现次数超过一半的数字

该题因为涉及到计数问题,所以一定是可以用哈希表解决的。

优化方法是使用摩尔投票法,

我们假设当前的数即为众数并且权重加一,之后如果不相等则权重减一,权重为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

剑指 Offer 66. 构建乘积数组

该题不允许使用除法除以当前的数来获取其他数的乘积,如果使用暴力方法时间复杂度为0

(n),不会ac。

构建两个乘积数组,一个是left表示当前下标为i的左边所有数的乘积,right为右边所有数的乘积。

最开始时建立两个数组,利用fill方法赋值每

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值