javascript中数组的常用算法深入分析(2)

const distinct = arr => arr.sort().reduce( (init, current) => { if (init.length === 0 || init[init.length - 1] !== current) { init.push( current ); } return init; }, []); let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4]; distinct(arr); // [1, 2, 3, 4, 5]

2、filter方法

const distinct = arr => arr.filter( (element, index, self) => { return self.indexOf( element ) === index; }); let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4]; distinct(arr); // [1, 2, 3, 5, 4]

(二)排序数组去重

/** * @param {number[]} nums * @return {number} */ var removeDuplicates = function(nums) { if(!nums || nums.length == 0) return 0; let len = 0; for(let i = 1; i < nums.length; i++) { if (nums[len] != nums[i]) { nums[++ len] = nums[i]; } } return len + 1; };

(三)判断数组是否存在重复

/** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { let hashMap = new Map(); for(let i = 0; i < nums.length; i++) { if( hashMap.has(nums[i]) ) { return true; } hashMap.set(nums[i], 1); } return false; };

七、两个数组的交集

给定两个数组,写一个方法来计算它们的交集。

例如:

给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].

注意:1、出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。2、

我们可以不考虑输出结果的顺序。

跟进:1、如果给定的数组已经排好序呢?你将如何优化你的算法?2、如果 nums1 的大小比 nums2 小很多,哪种方法更优?3、如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办?

解法:

/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ var intersect = function(nums1, nums2) { var map1 = new Map(); var number = []; for(var i = 0; i < nums1.length; i++) { var map1Value = map1.get(nums1[i]); map1.set( nums1[i], ( map1Value ? map1Value : 0 ) + 1 ); } for(var i = 0; i < nums2.length; i++) { if( map1.has(nums2[i]) && map1.get(nums2[i]) != 0 ) { number.push(nums2[i]); map1.set( nums2[i], map1.get(nums2[i]) - 1 ); } } return number; };

八、找出一个数组中只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

/** * @param {number[]} nums * @return {number} */ var singleNumber = function(nums) { let number = 0; for(let i = 0; i < nums.length; i++) { number ^= nums[i]; } return number; };

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/62c240683483cdc5399d4589e47c1c7e.html