• 【剑指Offer】简单部分每日五题


    04 - 二维数组中的查找

    要求:二维数组中,每一行从左到右递增,每一列从上到下递增。找是否存在一个数。
    题解:从右上角开始找,要变小就往左,要变大就往下。越界了就是找不到。

    /**
     * @param {number[][]} matrix
     * @param {number} target
     * @return {boolean}
     */
    var findNumberIn2DArray = function(matrix, target) {
      if (!matrix || matrix.length==0){return false}
      let row = 0, col = matrix[0].length - 1
      while(true){
        if (matrix[row][col]==target) {return true}
        if (matrix[row][col]>target) {col-=1} else {row+=1}
        if (row>=matrix.length || col <0) {return false}
      }
    };
    

    10-II - 青蛙跳台阶问题

    要求:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。
    题解:斐波那契数列递推之。n步的跳法等于n-1步的跳法加上n-2步的跳法。注意数据中res[0]=1,不必纠结意义。

    /**
     * @param {number} n
     * @return {number}
     */
    var numWays = function(n) {
      let res = []
      res[0] = 1; res[1] = 1; res[2] = 2;
      for (let i = 3; i <= n; i++) {
        res[i] = (res[i - 1] + res[i - 2]) % (1e9+7)
      }
      return res[n]
    };
    

    58-I - 翻转单词顺序

    要求:例如输入: "the sky is blue";输出: "blue is sky the"。
    题解:用空格split,入栈弹出即可。

    /**
     * @param {string} s
     * @return {string}
     */
    var reverseWords = function(s) {
      s = s.trim()
      let stack = s.split(' '), res = '', x
      while (stack.length != 0) {
        x = stack.pop()
        if (x != '' && x != ' ') {
          res += x
          res += ' '
        }
      }
      return res.substring(0, res.length - 1) // 去除最后一个多余空格
    };
    

    40 - 最小的k个数

    要求:输入整数数组arr,找出其中最小的k个数。
    题解:“正统”做法是优先队列(构造小顶堆,取k个)。C++中自带pq,但JS中不带。手写堆难度超纲,故用此处仅用sort解法,参考价值不大。
    注意Array.sort时最好覆写一下cmp函数,避免发生按字典序排序的悲剧。(a,b)=>a-b即为顺序排序。

    /**
     * @param {number[]} arr
     * @param {number} k
     * @return {number[]}
     */
    var getLeastNumbers = function(arr, k) {
      return arr.sort((a, b) => a - b).slice(0, k)
    };
    

    50 - 第一个只出现一次的字符

    要求:在字符串s中找出第一个只出现一次的字符。
    题解:map<char, bool>记录之。注意没必要统计出现次数,避免越界等错误。

    /**
     * @param {string} s
     * @return {character}
     */
    var firstUniqChar = function(s) {
      let map = {}
      for (let i = 0 ; i < s.length; i ++){
        if (map[s[i]]){map[s[i]]=-1}else{map[s[i]]=1}
      }
      for (let i = 0 ; i < s.length; i ++){
        if (map[s[i]]==1) return s[i]
      }
      return ' '
    };
    
  • 相关阅读:
    videojs 隐藏videobar
    nw 系统托盘的添加方式,以及ajax失效问题
    nw 注册快捷键
    bg-script 错误信息显示,以及global
    input 文件上传
    git stash,git cherry-pick
    安装Laravel
    nw + iframe嵌入page 滚动条问题
    require('nw.gui') 失效问题
    dell 交换机 双链路冗余
  • 原文地址:https://www.cnblogs.com/zxuuu/p/12501542.html
Copyright © 2020-2023  润新知