Skip to main content

其他

字符串

  • 判断回文字符串

数学

let a = "9007199254740991";
let b = "1234567899999999999";
function add(a, b) {
//...
}
function add(a, b) {
//取两个数字的最大长度
let maxLength = Math.max(a.length, b.length);
//用0去补齐长度
a = a.padStart(maxLength, 0); //"0009007199254740991"
b = b.padStart(maxLength, 0); //"1234567899999999999"
//定义加法过程中需要用到的变量
let t = 0;
let f = 0; //"进位"
let sum = "";
for (let i = maxLength - 1; i >= 0; i--) {
t = parseInt(a[i]) + parseInt(b[i]) + f;
f = Math.floor(t / 10);
sum = (t % 10) + sum;
}
if (f !== 0) {
sum = "" + f + sum;
}
return sum;
}

应用算法

洗牌算法

/* 洗牌算法:
1.生成一个0 - arr.length 的随机数
2.交换该随机数位置元素和数组的最后一个元素,并把该随机位置的元素放入结果数组
3.生成一个0 - arr.length - 1 的随机数
4.交换该随机数位置元素和数组的倒数第二个元素,并把该随机位置的元素放入结果数组
依次类推,直至取完所需的10k个元素
*/

function shuffle(arr, size) {
let result = [];
for (let i = 0; i < size; i++) {
const randomIndex = Math.floor(Math.random() * (arr.length - i));
const item = arr[randomIndex];
result.push(item);
arr[randomIndex] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = item;
}
return result;
}

缓存淘汰算法

  • LRU。关于缓存有个常见的例子是,当用户访问不同站点时,浏览器需要缓存在对应站点的一些信息,这样当下次访问同一个站点的时候,就可以使访问速度变快(因为一部分数据可以直接从缓存读取);LRU 是 Least Recently Used 的缩写,即最近最少使用,是一种常用的页面置换算法,选择内存中最近最久未使用的页面予以淘汰。vue 中 keep-alive 中就用到了此算法
class LRUCache {
constructor(capacity) {
this.secretKey = new Map();
this.capacity = capacity;
}
get(key) {
if (this.secretKey.has(key)) {
let tempValue = this.secretKey.get(key);
this.secretKey.delete(key);
this.secretKey.set(key, tempValue);
return tempValue;
} else return -1;
}
put(key, value) {
// key存在,仅修改值
if (this.secretKey.has(key)) {
this.secretKey.delete(key);
this.secretKey.set(key, value);
}
// key不存在,cache未满
else if (this.secretKey.size < this.capacity) {
this.secretKey.set(key, value);
}
// 添加新key,删除旧key
else {
this.secretKey.set(key, value);
// 删除map的第一个元素,即为最长未使用的
this.secretKey.delete(this.secretKey.keys().next().value);
}
}
}
// let cache = new LRUCache(2);
// cache.put(1, 1);
// cache.put(2, 2);
// console.log("cache.get(1)", cache.get(1))// 返回 1
// cache.put(3, 3);// 该操作会使得密钥 2 作废
// console.log("cache.get(2)", cache.get(2))// 返回 -1 (未找到)
// cache.put(4, 4);// 该操作会使得密钥 1 作废
// console.log("cache.get(1)", cache.get(1))// 返回 -1 (未找到)
// console.log("cache.get(3)", cache.get(3))// 返回 3
// console.log("cache.get(4)", cache.get(4))// 返回 4

十亿个数里面找到某个值

参考 https://www.easyblog.top/article/details/295