算法 多数元素(简单题)

题目描述:

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

例题描述:

算法 多数元素(简单题)_第1张图片

题目解析:

这道题刚开始看的时候,考虑的是他是否会返回两个输出?但是仔细一想发现是不可能的,因为⌊ n/2 ⌋是向下取整,如果是偶数个的元素,那么这个值就是n的一半,并且这个要求是大于,那么说明一定要求元素至少比n/2大,这样的元素在偶数的时候只有一个;当n是奇数个元素的时候,他向下取整的时候,就会取(n-1)/2,假设这个数记为num,则在这个数组中大于num 的数也是有且仅有一个,所以不论是奇数还是偶数,这个输出的元素都是一个,并且题目中给出一定存在多数元素,所以不用考虑不存在的情况,根据题目写代码

代码如下:

var majorityElement = function(nums) {
    var num =nums.length
    var count=0
    if(num == 1){
        return nums[0]
    }
    for(var i=0;iMath.floor(num/2)){
            return nums[i]
        }
        count=0
    }
};

代码思路:

当他只有一个元素的时候,这个元素一定是想要输出的那个元素,我们通过循环来找出多数元素,并且输出即可

存在问题:

在循环的时候,会存在重复循环,浪费了时间和空间的复杂度,所以需要改进

改进过后的代码:

var majorityElement = function(nums) {
    nums.sort((a,b)=>a-b)
    let l = 0,r=1
    for(let i=0;i<=nums.length;i++){
        if(nums[l]!==nums[r]){
            if(r-l>nums.length/2){
                return nums[l]
            }else{
                l=r
                r++
            }
        }else{
            r++
        }
    }
};

在时间复杂度上面改进了很多,但是空间复杂度反而提升了

你可能感兴趣的:(前端js,算法)