首页 > 解决方案 > 我不明白这段代码发生了什么

问题描述

你得到一个正整数数组。虽然数组有多个元素,但您可以选择两个元素并将它们替换为它们的总和或乘积。

您的任务是找到在多次此类操作后可以保留在数组中的最大可能数。

示例 对于 arr = [1, 3, 2],结果应为 9。

为了最大化答案,第一个操作将是 1 + 2(数组变为 [3, 3])和下一个 3 * 3(数组变为 [9]),因此最终结果为 9。

function sumOrProduct(arr) {
  if(arr.length == 1) return arr[0];
     arr = arr.sort();
  if(arr[0] == 1){
    if(arr.indexOf(2) == -1) arr.push(arr.shift() + arr.shift())
  else arr.push(arr.shift() + arr.splice(arr.indexOf(2),1)[0])
 }else arr.push(arr.shift() * arr.shift())
  return sumOrProduct(arr)
}

我不明白这部分,为什么他在那里使用 shift 方法。

if(arr[0] == 1){
if(arr.indexOf(2) == -1) arr.push(arr.shift() + arr.shift())
else arr.push(arr.shift() + arr.splice(arr.indexOf(2),1)[0])
}else arr.push(arr.shift() * arr.shift())

标签: javascript

解决方案


这是一个有趣的问题,但似乎解决方案是if there's 1, add it to the next lowest number, then multiply all the others

function sumOrProduct(arr){
  arr.sort((a,b)=>a-b)
  var num=arr[0]
  for(let i=1;i<arr.length;i++){
    if(num==1){num+=arr[i]}
    else{num*=arr[i]}
  }
  return num||0
}

console.log( sumOrProduct([1,2,3]) )
console.log( sumOrProduct([1,3,2]) )
console.log( sumOrProduct([1,5,3,2,4]) )

移位的作用是使用自定义起点(如 a for loop)循环遍历数组,但它不使用 afor loop并使用递归和移位从数组中取出值,以便不处理相同的数字。至于为什么这样做而不是使用 for 循环?我认为这个人讨厌循环;-;


推荐阅读