算法学习

程序开发中降低算法复杂度的核心方法论

第一步,暴力解法。在没有任何时间、空间约束下,完成代码任务的开发。
第二步,无效操作处理。将代码中的无效计算、无效存储剔除,降低时间或空间复杂度。
第三步,时空转换。设计合理数据结构,完成时间复杂度向空间复杂度的转移。

 

算法题目

假设有任意多张面额为 2 元、3 元、7 元的货币,现要用它们凑出 100 元,求总共有多少种可能性。

function calculate () {
  const res = []

  const a = 100 / 7
  const b = 100 / 3
  for (let i = 0; i < a; i++) {
    for (let j = 0; j < b; j++) {
      if ((100 - i * 7 - j * 3) > 0 && (100 - i * 7 - j * 3) % 2 === 0) {
        const c = (100 - i * 7 - j * 3) / 2 
        res.push([i, j, c])
      }
    }
  }

  return res
}

获取一个数组中多个字符串的最长公共前缀。

var arr = ['flsight', 'flsds', 'flsds', 'fls']

var getPrefix = function (arr){
  var miniLength = Math.min.apply(null, arr.map(item => item.length))
  
  var result = ''
  
  for (let i = 0; i < miniLength; i++) {
     var single = arr.map(item => item[i])
     var superone = Array.from(new Set(single))   
       if (superone.length === 1) result += superone[0]
  }
  
  return result
}

console.log(getPrefix(arr))

 将[1,2,3]转为{0:1, 1:2, 2:3}

var arr = [1,2,3]
var reducer = (target, item, index) => {
  return Object.assign(target, {[index]: item})
}

console.log(arr.reduce(reducer, {}))

使用最少的钱币张数来兑换零钱 

function LeastCoinsChange (coins) {
  debugger
  var coins = coins
  var cache = {}

  this.makeChange = function (money) {
    var self = this
    if (!money) return []
    if (cache[money]) return cache[money]

    var leastCoins = [], newLeast, newMoney;
    for (var i = 0; i < coins.length; i++) {
      var coin = coins[i]
      newMoney = money - coin
      if (newMoney >= 0) {
        newLeast = self.makeChange(newMoney)
      }
      if (newMoney >= 0 &&
       (newLeast.length < leastCoins.length - 1 || !leastCoins.length) &&
       (newLeast.length || !newMoney)) {
        leastCoins = [coin].concat(newLeast)
        console.log(`面额 ${money}  ===  新的最少硬币${leastCoins}`)
      }
    }

    cache[money] = leastCoins
    return cache[money]
  }
}

var leastCoinsChange = new LeastCoinsChange([1,5,10,25])
console.log(leastCoinsChange.makeChange(35))
找零钱问题

 

posted on 2019-03-15 09:43  dawnxuuu  阅读(131)  评论(0编辑  收藏  举报

导航