数组归约运算

简介: 数组归约运算

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

给定一个整数数组 nums、一个 reducer 函数 fn 和一个初始值 init,返回通过依次对数组的每个元素执行 fn 函数得到的最终结果。

通过以下操作实现这个结果:val = fn(init, nums[0]),val = fn(val, nums[1]),val = fn(val, nums[2]),… 直到处理数组中的每个元素。然后返回 val 的最终值。

如果数组的长度为 0,则函数应返回 init。

请你在不使用内置数组方法的 Array.reduce 前提下解决这个问题。

示例 1:

输入:
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr; }
init = 0
输出:10
解释:
初始值为 init=0 。
(0) + nums[0] = 1
(1) + nums[1] = 3
(3) + nums[2] = 6
(6) + nums[3] = 10
Val 最终值为 10。

示例 2:

输入: 
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr * curr; }
init = 100
输出:130
解释:
初始值为 init=100 。
(100) + nums[0]^2 = 101
(101) + nums[1]^2 = 105
(105) + nums[2]^2 = 114
(114) + nums[3]^2 = 130
Val 最终值为 130。

示例3:

输入: 
nums = []
fn = function sum(accum, curr) { return 0; }
init = 25
输出:25
解释:这是一个空数组,所以返回 init 。

提示:

  • 0 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
  • 0 <= init <= 1000

解题思路

题目的意思其实就是要我们实现一个reduce函数。

在函数中,首先对传入的参数进行校验:

  • 如果 fn 不是一个函数,或者 nums 是空数组,则直接返回初始值 init。
  • 否则,初始化结果变量 res 为初始值 init。

然后使用 for…of 循环遍历数组 nums,对每个元素调用归约函数 fn,并将返回值赋值给 res。

最后返回归约的结果 res。

实现了一个简单但实用的归约函数 reduce,可以方便地对数组进行求和、计数、查找等操作。

AC代码

/**
 * @param {number[]} nums
 * @param {Function} fn
 * @param {number} init
 * @return {number}
 */
var reduce = function (nums, fn, init) {
  if (typeof fn !== "function" || nums.length === 0) {
    return init;
  }
  let res = init;
  for (const num of nums) {
    res = fn(res, num);
  }
  return res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
6月前
|
Python
数组运算
【5月更文挑战第6天】数组运算。
46 1
|
6月前
|
算法 测试技术 C++
【位运算 反证法 试填法】2897.对数组执行操作使平方和最大
【位运算 反证法 试填法】2897.对数组执行操作使平方和最大
【位运算 反证法 试填法】2897.对数组执行操作使平方和最大
|
存储 算法 数据处理
数据的表示及运算
一、数据的表示及运算 数据的表示和运算是计算机系统中非常重要的概念,它们决定了计算机如何处理和操作数据。 1. 数据的表示:计算机使用二进制(0和1)来表示和存储数据。二进制是一种只有两个状态的编码方式,可以通过开关电路的开和关来表示0和1。计算机将二进制编码与不同的数据类型关联,例如整数、浮点数、字符等。 2. 整数运算:计算机可以对整数进行基本的算术运算,包括加法、减法、乘法和除法。这些运算是通过电子电路中的逻辑门实现的,逻辑门可以对二进制数进行逻辑运算和移位操作。 3. 浮点数运算:计算机可以进行浮点数的运算,浮点数是一种用于表示带有小数部分的数值的数据类型。浮点数运算涉及到浮点数的表示
78 0
|
11月前
集合的运算
集合的运算
81 1
第3章 数组与矩阵——3.1 数组运算(2)
第3章 数组与矩阵——3.1 数组运算(2)
第3章 数组与矩阵——3.1 数组运算(1)
第3章 数组与矩阵——3.1 数组运算(1)
|
算法 Java
数据结构—栈的应用举例【算术表达式求值转换、后缀表达式求值计算】
数据结构—栈的应用举例【算术表达式求值转换、后缀表达式求值计算】
189 0
数据结构—栈的应用举例【算术表达式求值转换、后缀表达式求值计算】
|
NoSQL MongoDB 数据库
数组运算|学习笔记
快速学习数组运算
|
机器学习/深度学习 算法
2170. 使数组变成交替数组的最少操作数 : 贪心算法运用题
2170. 使数组变成交替数组的最少操作数 : 贪心算法运用题