JS数据结构与算法(一)
一些常用的算法,未完待续
/**
* 数组元素去重
* @return {Array} 去重后的数组
* arr.deRepeat();
*/
Array.prototype.deRepeat = function () {
var newArr = [],
josn = {},
i,
len;
for (i = 0, len = this.length; i < len; i++) {
if (!josn[this[i]]) {
newArr.push(this[i]);
josn[this[i]] = 1; //存在添加标记
}
}
return newArr;
};
/**
* 递归实现二分查找排好序的数组
* @param {Number} l [要查找数组的左侧位置]
* @param {Number} r [要查找数组的右侧位置]
* @param {} targ [查找的目标值]
* @return {boolean} [返回是否查找成功]
*/
Array.prototype.binarySearch = function (l, r, targ) {
var len = r - l + 1,
mid;
if (l === r) {
return this[l] === targ ? true : false;
} else if (l > r) {
return false;
}
mid = l + Math.floor(len / 2) - 1;
if (targ === this[mid]) {
return true;
} else {
if (targ > this[mid]) {
return arr.binarySearch(mid + 1, r, targ);
} else {
return arr.binarySearch(l, mid - 1, targ);
}
}
return false;
};
/**
* 非递归实现二分查找排好序的数组
* @param {Number} l [要查找数组的左侧位置]
* @param {Number} r [要查找数组的右侧位置]
* @param {} targ [查找的目标值]
* @return {Number} [查找成功返回下标值,否则返回-1]
*/
Array.prototype.binarySearch2 = function (l, r, targ) {
var mid = (l + r) >> 1;
while (this[mid] !== targ && l <= r) {
if (this[mid] < targ) {
l = mid + 1;
} else if (this[mid] > targ) {
r = mid - 1;
}
mid = (l + r) >> 1;
}
return this[mid] === targ ? mid : -1;
};
// var arr = [1, 3, 5, 7, 9];
// console.log(arr.binarySearch2(0, 4, 9));
/**
* 随机获取颜色的十六进制值
* @return {string} [颜色的十六进制值]
*/
function randomColor() {
var resStr = '#',
cnt = 6,
eachPos,
hashArr = '0123456789ABDEF';
while (cnt--) {
eachPos = Math.floor(Math.random() * 15);
resStr += hashArr[eachPos];
}
return resStr;
}
// console.log(randomColor());