搜索
您的当前位置:首页正文

leetcode501:二叉搜索树的众数

来源:吉趣旅游网

思路1

先存成有序数组然后算众数,这里的小技巧就是遍历的时候加count,能极大缩减时间。
计算数组中最多的数,可以用map也尝试一下

JS语言

var findMode = function(root) {
    let arr=[]
    const buildtree = function(root){
        if(root){
            buildtree(root.left);
            arr.push(root.val);
            buildtree(root.right);
        }
    }

    buildtree(root);
    let maxcount=0,result=[],count=1;
    for(let i=0;i<arr.length;i=i+count){ //有序数组,遍历下一个值时以maxcount为基准,不然会超时
        let count=1;
        while(i+count<arr.length && arr[i]==arr[i+count]){
            count++;//arr[i]的数值
            }
        if(count>maxcount){
            maxcount=count;
            result=[];
            result.push(arr[i]);
        }
        else if (count==maxcount){
            result.push(arr[i]);
        }
        }
    return result;
};

思路2

用map,键值对,key用来存值。value存对应值的个数

var findMode = function(root) {
    let arr=[]
    const buildtree = function(root){
        if(root){
            buildtree(root.left);
            arr.push(root.val);
            buildtree(root.right);
        }
    }

    buildtree(root);//二叉搜索树的有序数组
    //求众数
    let map={},num=0;
    var result=[];
    //map的键值对,统计数对应的个数,也可以写得简练一点
    // for(var a of arr)
    for(var i=0;i<arr.length;i++){
        if(map.hasOwnProperty(arr[i])){
            map[arr[i]]++;
        }
        else{
            map[arr[i]]=1;
        }
    }
    
	//求出现的数次数最多的值
        for(var i in map){ //i是key
            if(num<map[i]){
                num=map[i];
                result=[];
                result.push(i);
            }
            else if(num == map[i]){ //如果两个数个数相等
                result.push(i);
            }
        }
    return result;
};

因篇幅问题不能全部显示,请点此查看更多更全内容

Top