剣指OFFER----5-3-1、数字がソート配列に出現する回数(js実現)


テーマ
一つの数字を統計して並べ替え配列に出現する回数.例えば、入力配列{1,2,3,3,3,3,4,5}と数字3は、この数の中で3回現れたので、出力4.
考え方
一番簡単な方法は最初の数から探すことですが、このような方法はきっと面接を通過できません.
配列を並べ替えるなら、第一のKを見つけるために、二分割で検索します.
中間の数を探すたびに、Kより大きいなら、最初のKを探し続けます.Kより小さいなら、後半で第一のKを探し続けます.Kであれば、第一のKかどうかを判断します.第一のKであれば、カウントを始めます.そうでなければ、引き続き前半で第一のKを探します.見つけたら、数え始めます.
function GetNumberOfK(data, k)
{
    // write code here
    if (!data) {
        return 0
    }
    let i = 0
    let j = data.length - 1
    while (i <= j) {
        let mid = Math.floor((i + j) / 2)
        if (data[mid] < k) {
            i = mid + 1
        } else if (data[mid] > k) {
            j = mid - 1
        } else {
            if (mid === 0) {
                let counts = 0
                for (let i = 0; i < data.length; i++) {
                    if (data[i] === k) {
                        counts++
                    } else {
                        break
                    }
                }
                return counts
            } else {
                if (data[mid-1] === k) {
                    j = mid - 1
                } else {
                    let counts = 0
                    for (let i = mid; i < data.length; i++) {
                        if (data[i] === k) {
                            counts++
                        } else {
                            break
                        }
                    }
                    return counts
                }
            }
        }
    }
    return 0
}