javascript - 我不明白这段代码发生了什么
问题描述
你得到一个正整数数组。虽然数组有多个元素,但您可以选择两个元素并将它们替换为它们的总和或乘积。
您的任务是找到在多次此类操作后可以保留在数组中的最大可能数。
示例 对于 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())
解决方案
这是一个有趣的问题,但似乎解决方案是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 循环?我认为这个人讨厌循环;-;
推荐阅读
- ios - IBOutlet 因 EXC_BAD_ACCESS 而崩溃,即使不是 nil
- php - “未定义索引:名称” Laravel 5.7 控制器
- python - 如何将 yticks 添加到 pyplot 中的一个特定点?
- sql-server - 设置从某个值开始的自动增量值 T-SQL
- mysql - Drupal - PDOException:SQLSTATE [42S02]
- java - java- SDK 版本和 Vm 选项
- java - 为什么 outputStream 没有 inputStream 就不能工作?
- arrays - 从数组中删除重复的内容
- c++ - 重新加载矩阵的运算符,但不会更改以前的矩阵
- pyspark - 解析jsons pyspark的字符串