先存成有序数组然后算众数,这里的小技巧就是遍历的时候加count,能极大缩减时间。
计算数组中最多的数,可以用map也尝试一下
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;
};
用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;
};
因篇幅问题不能全部显示,请点此查看更多更全内容