タイトル説明
この番号を見つけ、配列の半分以上の長さを表示される配列番号の数があります。例えば、入力アレイ9の長さは{1,2,3,2,2,2,5,4,2}。数2は5回、アレイ内のアレイの半分以上の長さ、出力2が表示されているので。0出力がある場合。
考え
数が数を認定していた場合、それは他の数字が表示されるすべての数よりもさらに表示されます:2考えます。
2つの値の配列を横断するとき保存:1は数値配列、1つの数です。次の番号を横断するとき、場合には、以前と同じ図、プラス数1に記憶されているか、1だけデクリメントされ、番号が0の場合、次の番号が保存され、その数は1に設定されています。保存された数字を通過した後も望まれています。そして、それは条件をすることができ満たしているかどうかを判断します。
JSコード
//方法一
function MoreThanHalfNum_Solution(numbers)
{
// write code here
const len = numbers.length
if (len === 0) return 0
const map = new Map()
for (let i of numbers) {
if (map.get(i) === undefined) {
map.set(i, 1)
}else {
map.set(i, map.get(i)+1)
}
}
for (let item of map.entries()) {
if (item[1] > Math.floor(len/2)) return item[0]
}
return 0
}
//方法二
function MoreThanHalfNum_Solution(numbers)
{
// write code here
if (numbers.length === 0) return 0
let res = numbers[0]
let times = 1
for (let i of numbers) {
if (times === 0) {
res = i
times = 1
}
else if (i === res) times++
else times--
}
times = 0
for (let i of numbers) {
if (i === res) times++
}
return times > Math.floor(numbers.length / 2)? res: 0
}