简单的算法题整理

一、数组去重的几种方法

1、利用indexof
2、[...new set()]

二、排序算法

1、冒泡O(n^2)
for(i=0){
  for(j=i+1){
    //从小到大排
    //把大的放到后面
    if(arr[i]>arr[j]){交换位置}

    //从大到小排,把小的放到后面
      if(arr[i]<arr[j]){交换位置}
  }
}
2、选择排序

在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

3、快速排序

拿到一个基准点,把比它小的数放到leftArr,比他大的放到rightArr,递归,直到leftArr长度为1

//判断数组长度是否小于等于1,如果是,则直接返回arr
if (arr.length <= 1) {  
    return arr;
}

//拿到基准点
let temp = arr.splice(midIndex, 1)[0]
//递归调用
return quickSort(leftArr).concat([temp],quickSort(rightArr))
4、插入排序

默认是一个未排序的数组,再建一个已排序数组,从未排序数组中依次取数temp,对已排序数组从后往前进行比较,将temp放到它本该在的位置

                //遍历i,把第i项的值存起来
                let temp = arr[i];
                let j = i - 1;
                while (j >= 0 && arr[j] > temp) {
                    //如果前一个数大于后一个数,将前一个数往后移一位
                    arr[j + 1] = arr[j]
                    j--
                }
                //此时的j是要处理的数排序后应该在的位置
                arr[j+1] = temp

三、二叉树

1、深度优先遍历

数据结构 : 栈,后进先出,用pop()
压栈顺序,先压右子树,再压左子树

    let stack = [];
    stack.push(biTree);

    while (stack.length != 0) {
        let node = stack.pop();
        console.log(node.data);
        if (node.rChild) {
            stack.push(node.rChild);
        }
        if (node.lChild) {
            stack.push(node.lChild);
        }

    }
2、广度优先遍历

数据结构 : 队列,先进先出,用shift()
入列顺序,先入左子树,再入右子树

3、前序遍历

数据结构:栈
使用两个while循环,大循环保证遍历到所有节点,小循环是不断进行向左深入

preOrder2() {
    var node = this.root
    var arr = []
    var stack = []
    while (node !== null || stack.length > 0) {
        while (node !== null) {
            stack.push(node)
            arr.push(node.data)
            node = node.left
        }
        //出来的时候node的左树已经遍历完了,此时是null
        if (stack.length > 0) {
            node = stack.pop()
            node = node.right
        }
        //出来后回到大循环的开始,又进入第一个小循环遍历左树
    }
    return arr
}
4、中序遍历

只需要将arr.push(node.data)换个位置即可

if (stack.length > 0) {
            node = stack.pop()
            arr.push(node.data)
            node = node.right
        }
5、后序遍历

将前序遍历的arr.push(node.data)换成arr.unshift(node.data)

while (node !== null) {
            stack.push(node)
            arr.unshift(node.data)  //最先接触到的节点最后才会被插入数组
            node = node.left
 }
5、创建二叉树

首先我们需要定义一个Node类,存储自身的值和对两个儿子的指针
并且定义有一个插入节点的方法

class Node {
    constructor(data) {
      this.data = data
      this.left = null
      this.right = null
    }
    insertNode(newNode) {
        if (newNode.data < this.data) {
            if (this.left === null) { this.left = newNode }
            else {
                this.left.insertNode(newNode)
            }
        }
        else {
            if (this.right === null) { this.right = newNode }
            else {
                this.right.insertNode(newNode)
            }
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度...
    南山码僧阅读 1,604评论 0 2
  • 0、总纲-数据结构分布图 # 1、基本的数据结构知识树[图片上传失败...(image-14e376-159973...
    一只狗被牵着走阅读 480评论 0 0
  • 排序算法 选择排序(O(n^2))从i=0开始循序n次,每次从(i, n)中寻找最小的数,用minIndex记录最...
    zhangivon阅读 453评论 0 2
  • css相关 1. 万能居中 1.margin: 0 auto;水平 2.text-align: center;水平...
    chaocc阅读 950评论 0 2
  • 1.找出整型数组中乘积最大的三个数 思路:1.先进行排序 2.考虑出现最大值的时候出现的情况 两负一正...
    六月繁花开阅读 409评论 0 0