跳至主要內容

2634. 过滤数组中的元素


2634. 过滤数组中的元素open in new window

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

Given an integer array arr and a filtering function fn, return a filtered array filteredArr.

The fn function takes one or two arguments:

  • arr[i] - number from the arr
  • i - index of arr[i]

filteredArr should only contain the elements from the arr for which the expression fn(arr[i], i) evaluates to a truthy value. A truthy value is a value where Boolean(value) returns true.

Please solve it without the built-in Array.filter method.

Example 1:

Input: arr = [0,10,20,30], fn = function greaterThan10(n)

Output: [20,30]

Explanation:

const newArray = filter(arr, fn); // [20, 30]

The function filters out values that are not greater than 10

Example 2:

Input: arr = [1,2,3], fn = function firstIndex(n, i)

Output: [1]

Explanation:

fn can also accept the index of each element

In this case, the function removes elements not at index 0

Example 3:

Input: arr = [-2,-1,0,1,2], fn = function plusOne(n)

Output: [-2,0,1,2]

Explanation:

Falsey values such as 0 should be filtered out

Constraints:

  • 0 <= arr.length <= 1000
  • -10^9 <= arr[i] <= 10^9

题目大意

给定一个整数数组 arr 和一个过滤函数 fn,并返回一个过滤后的数组 filteredArr

fn 函数接受一个或两个参数:

  • arr[i] - arr 中的数字
  • i - arr[i] 的索引

filteredArr 应该只包含使表达式 fn(arr[i], i) 的值为 真值arr 中的元素。真值 是指 Boolean(value) 返回参数为 true 的值。

请在不使用内置的 Array.filter 方法的情况下解决该问题。

提示:

  • 0 <= arr.length <= 1000
  • -10^9 <= arr[i] <= 10^9

解题思路

这道题考察的是对数组的过滤操作,类似于 JavaScript 内置的 Array.prototype.filter 函数。

  1. 初始化一个新数组:用于存储所有通过回调函数 fn 检查的元素。
  2. 遍历数组:对于数组中的每一个元素,通过回调函数 fn 来检查是否保留该元素。
  3. 保存符合条件的元素:将符合条件的元素存入新数组。
  4. 返回新数组:所有元素过滤完成后,返回包含符合条件元素的新数组。

复杂度分析

  • 时间复杂度O(n),其中 n 是数组的长度,需要遍历整个数组,对每个元素调用回调函数 fn
  • 空间复杂度O(n),因为需要一个新数组来存储过滤后的元素。

代码

/**
 * @param {number[]} arr
 * @param {Function} fn
 * @return {number[]}
 */
var filter = function (arr, fn) {
	let result = [];
	for (let i = 0; i < arr.length; i++) {
		if (fn(arr[i], i)) {
			result.push(arr[i]);
		}
	}
	return result;
};

相关题目

题号标题题解标签难度
2626数组归约运算open in new window[✓]
2631分组open in new window[✓]
2635转换数组中的每个元素open in new window[✓]