用reduce装逼 之 多个数组中得出公共子数组,统计数组元素出现次数

昨天做了一道美团的面试题,要求是给N个数组,找出N个数组的公共子数组。

var a = [7,2,3,4,5];
var b = [4,2,3,7,6];
var c = [2,3,3,3,7];
var d = [4,2,3,8,7];

以上四个数组,有公共子数组2, 3,7

function main(){
    var result = [];
    var arr = arguments[0];
    for(var i=1 ; i<arguments.length ; i++){
        var arr = arguments[i].reduce((a,item)=>{
            arr.indexOf(item)!=-1 && a.push(item)
            return a
        },[])
    }
    return arr
}

具体方法如上,es6清新脱俗的写法,用好reduce可以省好多事情。

同样得出以上数组的数组的元素出现次数应该怎么办;

function main(){
    var arr = [].reduce.call(arguments,(a,item)=>a.concat(item),[]);
    return arr.reduce((a,num)=>{
        a[num] && ++a[num] || (a[num]=1);
         return a
    },{})
}

这个reduce有没有用的清新通俗呀。

我知道大家心里肯定想着好清新的一逼啊。

没错,学好reduce装逼,其他人只有喊666的份了。

加油咯!!!

时间: 2024-10-29 10:46:19

用reduce装逼 之 多个数组中得出公共子数组,统计数组元素出现次数的相关文章

算法题:找出一个数组中相加值最大的连续序列元素

package arithmetic; /** * @author SHI * 求一个数组中相加值最大的连续序列元素 */ public class MaxSequence { public static void main(String[] args) { int[] a=new int[]{-2,9,-3,4,-6,7,-6,4}; findBigSequence(a); } /** * 思想: (1)计算出该数组的所有元素和,假设该值为最大 * (2)从数组下标1到a.length-1依次

php array_rand()函数从数组中随机选择一个或多个元素

php使用array_rand()函数从数组中随机选择一个或多个元素的方法. 使用array_rand() 函数从数组中随机选出一个或多个元素,并返回. array_rand(array,number) 参数 描述 array 必需.规定输入的数组参数. www.jbxue.com number 可选.默认是 1.规定返回多少个随机的元素. 例子: <?php $a=array("a"=>"Dog","b"=>"Cat

算法学习(3)----求数组中大小最接近的两个元素的差

<算法设计与分析基础>习题1.2 第 9 题如下: 考虑下面这个算法,它求的是数值数组中大小最接近的两个元素的差. 算法: MinDistance(A[0..n-1]) //输入:数字数组 A[0..n-1] //输出:数组中两个大小相差最少的元素的差值 dmin <- ∞ for i <- 0 to n-1 do for j <- 0 to n-1 do if i≠j and |A[[i]-A[j]| < dmin dmin <- |A[i]-A[j]| ret

在二维有序数组中搜索某个数(存在否、出现次数)

在二维有序数组中搜索某个数(存在否.出现次数) 问题描述 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没有重复的整数. 样例 考虑下列矩阵: [ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10] ] 给出target = 3,返回 2 实现思路 由于数组每行从左到右是有序的,每列从上到下是有序的,因此可以考虑从二维数组的右上角开始搜索.

将两个排好序的数组,合并到另外一个数组中,并且合并之后的数组也是有序的。

int a[3] = {12, 15, 17}; int b[4] = { 2, 8, 16, 22}; int c[7] = {0}; int i = 0, j = 0, k = 0; while (i < 3 && j < 4 ) { if (a[i] > b[j]) { c[k++] = b[j++]; } else { c[k++] = a[i++]; } } while (i < 3) { c[k++] = a[i++]; } while (j <

返回数组中最小/大值,适用数组

//返回数组中的最小值 function min(target){ return Math.min.apply(0,target); } //返回数组中的最大值 function max(target){ return Math.max.apply(0,target); } 返回数组中最小/大值,适用数组

在未排序的数组中找到第 k 个最大的元素

在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度.思路方法:这道题思路就挺简单的,考查的就是对排序算法的了解.就用排序算法把数组元素按照降序排列,最后返回排序好的数组中下标为k-1的元素即是答

数组中的方法 --- 不改变原数组的方法

1.concat()把元素衔接到数组中. concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 2.every() 方法使用指定函数检测数组中的所有元素: 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测. 如果所有元素都满足条件,则返回 true 3.filter()返回满足断言函数的数组元素. 4.forEach()为数组的每一个元素调用指定函数. 5indexOf()在数组中查找指定元素. 

【原创】leetCodeOj --- Majority Element 解题报告(脍炙人口的找n个元素数组中最少重复n/2次的元素)

题目地址: https://oj.leetcode.com/problems/majority-element/ 题目内容: Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times. You may assume that the array is non-empty and the majority