数组
二分查找数组中出现的第一个元素
代码如下:
function binarySearch(array, target) {
function getFirstItem(idx) {
while(idx >= 0 && array[idx] === target) {
idx -= 1;
}
return idx + 1;
}
function search(left, right) {
while(left <= right) {
let mid = Math.floor((left + right) / 2);
if(array[mid] === target) {
// 看看 mid 的左边元素是不是与 target 相等(因此要找第一个出现的元素)
return getFirstItem(mid - 1);
} else if(array[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
return search(0, array.length - 1);
}
洗牌算法
给定一个数组,将数组中的元素重新随机分配到不同的下标上。使用交换算法实现:
/**
* 数组乱序(洗牌算法)
* @param {Array} array
*/
function shuffle(array){
// 浅克隆
var result = [...array],
len = array.length;
for(let i = 0;i < len;i ++){
// 获取随机的下标
var randomIdx = Math.floor(Math.random() * len);
// 交换
var temp = result[randomIdx];
result[randomIdx] = result[i];
result[i] = temp;
}
return result;
}