算法设计与技巧
- 分而治之算法
- 动态规划
- 贪心算法
- 回溯算法
- 著名算法问题
分而治之是算法设计的一种方法。它将一个问题分成多个和原问题相似的小问题,递归解决小问题,再将解决方式合并以解决原来的问题。
分而治之版本的二分搜索算法。
function binarySearchRecursive(arr,val,low,high){ if(low <= high){ const mid = Math.floor((low + high) / 2) const element = arr[mid] if(element < val){ binarySearchRecursive(arr,val,mid + 1,high) }else if(element > val){ binarySearchRecursive(arr,val,low,mid - 1) }else{ return mid } } } function binarySearch(arr,val){ const sortArr = quickSort(arr) const low = 0,high = arr.length - 1; return binarySearchRecursive(sortArr,val,low,high) }
动态规划是一种将复杂问题分解成更小的子问题来解决的优化技术。
function minCoinChange(coins,amount){ const cache = [] function makeChange(value){ if(!value){ return [] } if(cache[value]){ return cache[value] } let min = [] let newMin; let newAmount; for(let i = 0;i < coins.length;i++){ let coin = coins[i] newAmount = value - coin if(newAmount >= 0){ newMin = makeChange(newAmount) } if(newAmount >= 0 && (newMin.length < min.length -1 || !min.length) && (newMin.length || !newAmount)){ min = [coin].concat(newMin) } } return (cache[value] = min) } return makeChange(amount) }
未完待续...
以自己现在的努力程度,还没有资格和别人拼天赋