// 假设本地机器无法做加减乘除法,需要通过远程请求让服务端来实现。// 以加法为例,现有远程API的模拟实现const addRemote = async (a, b) => new Promise(resolve => {setTimeout(() => resolve(a + b), 1000)})let starttime = new Date().getTime()// 请实现本地的add方法,调用addRemote,能最优的实现输入数字的加法。const map = new Map()const getMapKeys = (inputs) => {let mapKeys = []inputs = inputs.sort((a, b) => a - b)for (let i = 0;i<inputs.length; i++) {if (inputs.length - i <= inputs.length/2) {mapKeys.push([`${inputs[i]}+${inputs[inputs.length -i]}`, `${inputs[inputs.length -i]}+${inputs[i]}`])}}return mapKeys}const caculate = async (key) => {let agrs = key.split('+')agrs = agrs.map(e=> +e)return await addRemote(...agrs)}async function add(...inputs) {// 你的实现if (inputs.length <2) return inputslet mapKeys = getMapKeys(inputs)let res = 0;for (let i = 0; i<mapKeys.length; i++) {// console.log('map', map)if (map.has(mapKeys[i][0])) {res += map.get(mapKeys[i][0])} else if(map.has(mapKeys[i][1])) {res += map.get(mapKeys[i][1])} else {let result = await caculate(mapKeys[i][0])map.set(mapKeys[i][0], result)map.set(mapKeys[i][1], result)res += result}}return res}// // 请用示例验证运行结果:let arr = Array(20).fill(20).map(() => Math.ceil(Math.random() * 10))add(arr).then(result => {console.log(result) // 3endTime = new Date().getTime()console.log(endTime - starttime)})
