0%

算法小集合

1、输入斐波那契数列的个数,返回数列成员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function fib(max){
let a=0,b=1;
let arr=[a,b];
while(arr.length<max){
[a,b]=[b,a+b];
arr.push(b)
}
return arr;
}
console.log(fib(5));

// 测试:
fib(5); // [0, 1, 1, 2, 3]
fib(10); // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

2、给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
方法一
function twoSum(arr, value) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length-1; j++) {
if (arr[i] + arr[j] === value) {
return [i, j]
}
}
}
return ("没有找到")
}
let arr = [1,2,5,2,1, 6]
console.log(twoSum(arr, 7));

方法二

function twoSum (arr, value) {
const mapArr = new Map();
for ( let i = 0 ; i < arr.length; i++) {
let n1 = arr[i]
let n2 = value - arr[i]
if (mapArr.has(n2)) {
return [mapArr.get(n2), i]
}else {
mapArr.set(n1,i) //将索引作为值,方便通过get取到
}
}
}

3、输出一篇英语文章中出现次数最多的单词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//找出一篇英文文章中出现次数最多的单词
function getMaxTimesWords(article) {
if (article === null) {
return;
}
//遍历每一个单词,创建一个map对象来存储记录每个单词出现的次数key: "string", value: number
let newMap = new Map();
let words = article.split(' ');
for (let i = 0; i < words.length; i++) {
if (!newMap.has(words[i])) {
newMap.set(words[i], 1);
} else {
newMap.set(words[i], newMap.get(words[i]) + 1);
}
}

let item = { key: '', value: 0 };
newMap.forEach((value, key) => {
value > item.value && ((item.value = value), (item.key = key));
});
return item;
}
let article = 'i am a dog, i am a cat , i has a dolphin ha ha ha haha hah ha ';
console.log(getMaxTimesWords(article));