题目
给定一组数据,给定一个目标值,通过编写一个函数,返回两数之和等于目标的下标
var arr = [2, 7, 11, 15]
var target = 9
//解法一:
// function fn(arr, target) {
// var temp = []
// for (var i = 0; i < arr.length; i++) {
// for (var j = i + 1; j < arr.length; j++) {
// var flag = ((arr[i] + arr[j]) == target) ? true : false
// if (flag) {
// return [i, j]
// }
// }
// }
// }
// console.log(fn(arr, target))
//解法二:
function fn2(nums, target) {
var temp = {}
for (var i = 0; i < arr.length; i++) {
//使用目标值减去循环当前的数,得到的差值,判断这个数组中有没有存在这个差值
var dif = target - arr[i]
if (temp[dif] !== undefined) {
return [i, temp[dif]]
}
temp[arr[i]] = i
}
}
console.log(fn2(arr, target))
题目二:
假如有一组不同面值的硬币(1 5 10 25),给定一个找零的钱数(36),计算符合零钱最少的硬币
<script>
var arr = [1, 5, 10, 25]
var target = 36
function fn(coins, amount) {
var result = null
if (!amount) return result
var makeChange = function fn(index, value, min) {
var coin = coins[index]
var newAmount = Math.floor(value / coin)
if (newAmount) min[coin] = newAmount
if (value % coin !== 0) {
makeChange(--index, value - coin * newAmount, min)
}
}
var arr = []
for (var i = 0; i < coins.length; i++) {
var cache = {}
makeChange(i, amount, cache)
arr.push(cache)
}
console.log(arr)
var newMin = 0
arr.forEach(function(item) {
var min = 0
for (var v in item) min += item[v]
if (!newMin || min < newMin) {
newMin = min
result = item
}
})
return result
}
console.log(fn(arr, target))
</script>