Open Twlig opened 2 years ago
给定一个目标值29999,以及数组,使用数组中的数字组合成小于该目标值的最大值。 思路:
let arr = [1, 5, 8, 4] let target = 29999 function arrToNumber(arr) { return parseInt(arr.join('')) }
function set(resArr, index, indexArr, arr) { let temp while (index >= 0) { temp = indexArr[index] if(index === 0 && temp === -1) { resArr.splice(0, 1) resArr.fill(arr[0]) break } if(temp !== -1) { resArr[index] = arr[temp] resArr.fill(arr[0], index + 1) break } index-- } }
function getMin(arr, target) { let tarArr = (target + '').split("").map(value => parseInt(value)) arr.sort((a, b) => b - a) let m = tarArr.length let n = arr.length let indexArr = new Array(m).fill(-1) let resArr = new Array(m).fill(-1) for(let i = 0; i < m; i++) { for(let j = 0; j < n; j++) { if(arr[j] === tarArr[i]) { resArr[i] = arr[j] } if(arr[j] < tarArr[i] && indexArr[i] === -1) { indexArr[i] = j break } } if(resArr[i] === -1) { set(resArr, i, indexArr, arr) break } } let res = arrToNumber(resArr) let isSame = res === target if(isSame) { if(indexArr[m - 1] !== -1) { resArr[m - 1] = arr[indexArr[m - 1]] } else { //从m-2位开始 set(resArr, m - 1, indexArr, arr) } res = arrToNumber(resArr) } return res } getMin(arr, target)
给定一个目标值29999,以及数组,使用数组中的数字组合成小于该目标值的最大值。 思路:
function set(resArr, index, indexArr, arr) { let temp while (index >= 0) { temp = indexArr[index] if(index === 0 && temp === -1) { resArr.splice(0, 1) resArr.fill(arr[0]) break } if(temp !== -1) { resArr[index] = arr[temp] resArr.fill(arr[0], index + 1) break } index-- } }
function getMin(arr, target) { let tarArr = (target + '').split("").map(value => parseInt(value)) arr.sort((a, b) => b - a) let m = tarArr.length let n = arr.length let indexArr = new Array(m).fill(-1) let resArr = new Array(m).fill(-1) for(let i = 0; i < m; i++) { for(let j = 0; j < n; j++) { if(arr[j] === tarArr[i]) { resArr[i] = arr[j] } if(arr[j] < tarArr[i] && indexArr[i] === -1) { indexArr[i] = j break } } if(resArr[i] === -1) { set(resArr, i, indexArr, arr) break } } let res = arrToNumber(resArr) let isSame = res === target if(isSame) { if(indexArr[m - 1] !== -1) { resArr[m - 1] = arr[indexArr[m - 1]] } else { //从m-2位开始 set(resArr, m - 1, indexArr, arr) } res = arrToNumber(resArr) } return res } getMin(arr, target)