斐波那契数列在算法题中比较经典,故出此文以此铭记。
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39
暴力递归实现
1 2 3 4
| function Fibonacci(n){ if(n == 0 || n == 1) return n return Fibonacci(n-1) + Fibonacci(n-2) }
|
数组保存计算缓存,减少计算
1 2 3 4 5 6 7 8
| function Fibonacci(n){ let arr = [0,1] return Fib(n) function Fib(n){ if(arr[n] !== undefined ) return arr[n] return arr[n] = Fib(n-1) + Fib(n-2) } }
|
动态规划
1 2 3 4 5 6 7 8
| function Fibonacci(n){ let a = 0 let b = 1 for(let i = 2;i< n;i++ ){ [a,b] = [b,a+b] } return a+b }
|
感觉这篇幅有点短,好吧再加几个算法题^_^
经典算法二分查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function Find(target,array){ for(let i =0 ;i<array.length;i++){ let low = 0 let height = array[i].length - 1 while(low <= height){ let mid = Math.floor((low+height)/2) if(target > array[i][mid]){ low = mid + 1 }else if(target < array[i][mid]){ height = mid -1 }else{ return true } } } return false }
|
此题还有一种更好的思路:既然是递增数组,那我们就比较一下每一行数组最大的元素,如果此数大于这一行的最大元素则去下一行数组比较,如果此数小于这一行的最大元素则去前一列比较;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function Find(target,array){ let row = 0 let col = array[0].length -1 let len = array.length while(row < len && 0 <= col){ if(target > array[row][col]){ row++ }else if(target < array[row][col]){ col-- }else{ return true } } return false }
|
链表
链表也是数据结构中的一种,由指针指向。
题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
function printListFromTailToHead(head) { let ArrayList = [] while(head){ ArrayList.push(head.val) head = head.next } ArrayList.reverse() return ArrayList }
|
JavaScript实现队列
队列是数据结构中的一种,先进先出FIFO,我们用数组来实现它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function Queue(){ let arr = [] this.pop = function(){ if(arr.length <= 0) return return arr.shift() } this.push = function(data){ arr.push(data) } } let queue = new Queue() queue.push(1) queue.push(2) queue.push(3) queue.pop()
|
JavaScript实现栈
栈是数据结构中的一种,先进先出FILO,我们用数组来实现它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function Stack(){ let value = [] this.pop = function(){ if(value.length <= 0) return return value.pop() } this.push = function(data){ value.push(data) } }
let stack = new Stack() stack.push(1) stack.push(2) stack.push(3) stack.pop()
|
好了此次的文章就写到这了,祝高三学子高考顺利!!!