erbing/logic-training

找出数组中重复项最多的一个数字

erbing opened this issue · 5 comments

let arr = [1,2,3,3,3,4,4,5,5,5,5,5,5,6,6,6,6,45,43,3,2,2,3,23]
let getMaxRepeat = (arr) => {
    //  todo
}
const findMax = (arr) => {
    let newObj = {}
    if(!arr.length) return '数组不能为空噢~'
    if (arr.length == 1) return arr[0]
    for (let i = 0; i < arr.length; i++) {
        const e = arr[i];
        if(!newObj[e]) newObj[e] = 0
        newObj[e] = newObj[e] + 1
    }
    let objKeys = Object.keys(newObj)
    let objVaule = Object.values(newObj)
    let maxIndex = objVaule.indexOf(Math.max(...objVaule))
    let maxRepeatValue = objKeys[maxIndex]
    return maxRepeatValue 
}
let arr = [1,1,2,3,1,2,3,4,5,1,2,1,];
let  removal_arr = Array.from(new Set(arr));   //去重的数组

let count = 0;
let obj = {};   //每个数字出现的次数的统计
removal_arr .forEach(i  => {
   count = 0;
  arr.forEach(j => {
       if (i === j) {
           count++;
         }
     })
    obj[i] = count;
 })
let arr = [1, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 45, 43, 3, 2, 2, 3, 23]
    let getMaxRepeat = (arr) => {
      let h = {};
      let maxNum = 0;
      let maxEle = null;
      for (let i = 0; i < arr.length; i++) {
        let a = arr[i];
        h[a] === undefined ? h[a] = 1 : (h[a]++);
        if (h[a] > maxNum) {
          maxEle = a;
          maxNum = h[a];
        }
      }
      return '最多得是' + maxEle + '次数为' + maxNum;
    }

@babyxu51521 @zds15172671314 这个代码可以用 markdown 格式,稍微美观一些

var arr = [1,2,3,3,3,4,4,5,5,5,5,5,5,6,6,6,6,45,43,3,2,2,3,23]
var getMaxRepeat = (arr) => {
	let hash = {}
	arr.reduce((pre, next)=> {
		hash[next] ? hash[next]++ : hash[next] = 1
	})
	let value = Object.values(hash)
	let key  = Object.keys(hash)
	let idx = value.indexOf(Math.max(...value))
	let maxRepeatValue = key[idx]
	console.log(maxRepeatValue)
	return maxRepeatValue
}
getMaxRepeat(arr)