数据结构
Array数组(索引-值)
Queue队列(先进先出)
Stack栈(后进先出)
Map散列(值-值)
LinkList链表
Heap堆
Tree树
Graph图
常用算法
链表反转
function reverseList(head){
let prev = null
let curr = head
while(curr != null){
let cnext = curr.next
curr.next = prev
prev = curr
curr = cnext
}
return prev
}
返回第n个斐波那契数
function fib(n){
if(n==0) return 0
if(n==1) return 1
return fib(n-2)+fib(n-1)
}
function fib2(n){
if(n==0) return 0
if(n==1) return 1
let [prev,next]=[1,1]
for(let i=2;i<n;i++){
[prev,next]=[next,prev+next]
}
return next
}
生成长度为len的斐波那契数列
function fibArr(len=1){
if(len==1) return [0]
let [prev,next,arr]=[0,1,[0,1]]
for(let i=2;i<len;i++){
[prev,next]=[next,prev+next]
arr.push(next)
}
return arr
}
冒泡排序
function bubbleSort(arr){
let LEN=arr.length
for(let i=0;i<LEN;i++){
for(let j=i+1;j<LEN;j++){
if(arr[i]>arr[j]){
let tmp=arr[i]
arr[i]=arr[j]
arr[j]=tmp
}
}
}
return arr
}
选择排序
function selectSort(arr){
const LEN=arr.length
for(let i=0;i<LEN;i++){
let minIndex=i+1,min=arr[minIndex];
for(let j=i+2;j<LEN;j++){
if(arr[j]<min){
min=arr[j]
minIndex=j
}
}
if(arr[i]>arr[minIndex]){
let tmp=arr[i]
arr[i]=arr[minIndex]
arr[minIndex]=tmp
}
}
return arr
}
二分查找
function BinarySearch(arr,target){
let [from,to]=[0,arr.length-1]
let mid=Math.floor((from+to)/2)
while(from<=to){
mid=Math.floor((from+to)/2)
if(arr[mid]>target){
to=mid-1
}else if(arr[mid]<target){
from=mid+1
}else{
return mid
}
}
return -1
}
常用方法
更多js实用方法
传送门
数组去重
function unique(arr){
return [...new Set(arr)]
}
反转字符串
function reverseString(str){
return str.split("").reverse().join("")
}
生成长度为len的随机字符串
function randomString(len=0){
const randomFn=()=>{
const randomNum=Math.floor(Math.random()*(122-65)+65)
console.log(randomNum)
return String.fromCharCode(randomNum)
}
return Array.from(new Array(len),n=>randomFn()).join("")
}