• 算法类面试题


    1、算法---栈

    判断括号成对出现

    sdfj(nrg(lj()k)nk)sldjwef          合法

    q(wdwf()hknkql(whdq)w)       合法

    hk)nqeif)liq(h(flq)wj(              不合法

    思路:

      括号存在嵌套关系,也存在并列关系

    可以遍历字符串的每一个字符,使用栈来处理:

    (1)遇到左括号,把左括号压入栈中

    (2)遇到右括号,判断栈是否为空,为空说明没有左括号与之对应,则不合法。如果栈不为空,则移除栈顶的左括号---这对括号抵消了

    当遍历结束后,如果栈是空的则合法,否则不合法

    2、冒泡排序

    解析:

    (1)比较相邻的两个元素,如果前一个比后一个大,则交换位置

    (2)第一轮的时候,最后一个元素应该是最大的一个

    (3)按照步骤(1)的方法进行相邻两个元素比较,由于最后一个元素已经是最大的了,所以最后一个元素不用比较

    // 冒泡排序
    let arr = [1, 6, 3, 7, 5, 9, 2, 8];
    function sort(arr) {
      // 升序
      console.time("冒泡排序耗时")
      let num = null
      for (let i = 0; i < arr.length - 1; i++) {
        // 外层循环的作用是:每次循环找出一个最大数放在这个数组的最后面
        for (let j = 0; j < arr.length - i - 1; j++) {
          // 内层循环的作用是:比较相邻两个数的大小从而进行交换位置
          // 借助一个中间容器交换位置
          if (arr[j] > arr[j + 1]) {
            num = arr[j]
            arr[j] = arr[j + 1]
            arr[j + 1] = num
          }
        }
      }
      console.log(arr)
      console.timeEnd("冒泡排序耗时")
    }
    sort(arr)

    3、快速排序

    解析:快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两个部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实现快速排序。

    // 快速排序
    // 快速排序就是从中间取一个数,然后声明两个空数组
    // 小于这个数的放在左边,大于这个数的放在右边
    // 最后通过递归调用实现的一种排序方法
    // 比冒泡排序用的更多
    
    let arr = [1, 6, 3, 7, 2, 2, 2, 5, 9, 2, 8];
    
    function sort(arr) {
      if (arr.length <= 1) {
        // 递归出口
        return arr
      }
      let middleIndex = Math.floor(arr.length / 2) // 中间数的下标,分奇偶
      let middle = arr.splice(middleIndex, 1)[0]
      let left = []
      let right = []
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] < middle) {
          left.push(arr[i])
        } else{
          right.push(arr[i])
        }
      }
      return sort(left).concat([middle], sort(right))
    }
    
    console.log(sort(arr))

    js十大排序算法:https://www.cnblogs.com/beli/p/6297741.html

  • 相关阅读:
    SQLSERVER 中GO的作用
    工作相关工具介绍
    SQL Server 没有足够的内存继续执行程序 (mscorlib)的解决办法
    glyphicons-halflings-regular.woff2 not found 前台错误修正
    Asp.net MVC Pager分页实现
    金融相关网站
    Excel 函数使用
    C# 使用 Invoke 实现函数的白盒 UT 测试
    反编译工具
    SQL Server 数据库修改后不允许保存
  • 原文地址:https://www.cnblogs.com/haishen/p/11257816.html
Copyright © 2020-2023  润新知