バックグラウンド
私は現在このような配列を持っています:
[1,1,2,3,4,5,5,5,6,7,8,8,8,8,9,10]
私はこのウェブサイトから素晴らしいJSバイナリ検索式を使用しています:
searchArray = function(needle, haystack, case_insensitive) {
if (typeof(haystack) === 'undefined' || !haystack.length) return -1;
var high = haystack.length - 1;
var low = 0;
case_insensitive = (typeof(case_insensitive) === 'undefined' || case_insensitive) ? true:false;
needle = (case_insensitive) ? needle.toLowerCase():needle;
while (low <= high) {
mid = parseInt((low + high) / 2)
element = (case_insensitive) ? haystack[mid].toLowerCase():haystack[mid];
if (element > needle) {
high = mid - 1;
} else if (element < needle) {
low = mid + 1;
} else {
return mid;
}
}
return -1;
};
これは、単一の値を返す場合に正常に機能します。
質問
単一の値ではなく範囲を返すにはどうすればよいですか?たとえば8
、配列からすべての値を返すにはどうすればよいでしょうか。ただし、それでもバイナリ検索を使用します(すべてをループしたくない!!)。
ありがとう!