// 第一题
// 1. 有一个数组,已知其所有元素都在1到N之间(包括1和N),用你最熟悉的语言写段代码找出1到N这N个数里不在这个数组里边的数。 N为10-10_000_000
// 例如输入:
// 10
// 1 2 3 4 7 9 10
// 输出:
// 5 6 8
function fn1(num, arr) {
if (num < 10) return
if (num > 10000000) return
let newarr = []
for (let i = arr[0], j = 0; i < num; i++, j++) {
if (!arr.includes(i)) {
newarr.push(i)
}
}
console.log(newarr)
return newarr
}
fn1(20, [1, 3, 4, 7, 9, 10, 15, 18])
// 第二题
// 2. 有一个英文单词字符串,请统计每个单词的出现频次, 按频次由高到低排序, 频次相同的按单词字典序排序。
// 例如输入:
// this is an apple.
// 输出:
// an: 1
// apple: 1
// is: 1
// this: 1
function fn2(str) {
const arr = str
.split(/ |,/) // 分割
.filter(item => {
// 去空
return item
})
.sort() // 排序
const obj = {}
for (let i = 0, len = arr.length; i < len; i++) {
if (!obj[arr[i]]) {
// 第一次出现
obj[arr[i]] = 1
} else {
obj[arr[i]]++
}
}
var newObj = Object.keys(obj).sort((a, b) => {
return obj[b] - obj[a]
})
for (key in newObj) {
console.log(newObj[key] + ':' + obj[newObj[key]])
}
}
fn2('this is an apple, that is a pear')
// 第三题
// 3. 求斐波拉契数列的第N项。 fib(1) = fib(2) = 1, fib(n) = fib(n-1) + fib(n - 2)
// 例如输入:
// 5
// 输出:
// 5
function Fibonacci(n) {
if (n > 1) {
return Fibonacci(n - 1) + Fibonacci(n - 2)
}
return n
}
Fibonacci(5)
console