08-03 js算法题(freecodecamp)

中级算法题,还是挺难的,做了两道,看了看人家的代码,觉得自己的思维可能还不是那么灵敏,好多只能想到最简单的方法,但又不能很好的解决问题,还是要多加练习,多看看基础,再来做这些题吧。写了两道,也总结一下吧。


今天状态有点差,有点慵懒。


08-03 js算法题(freecodecamp)_第1张图片
感到鸭力

1.比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。换言之,返回两个数组的差异。
["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"]应该返回[]
[1, 2, 3, 5],[1, 2, 3, 4, 5]应该返回 [4]
[1, "calf", 3, "piglet"],[1, "calf", 3, 4]应该返回 ["piglet", 4]
[],["snuffleupagus", "cookie monster", "elmo"]应该返回 ["snuffleupagus", "cookie monster", "elmo"]
[1, "calf", 3, "piglet"], [7, "filly"]应该返回 [1, "calf", 3, "piglet", 7, "filly"]

可能用到的方法:

  • Array.slice()
  • Array.filter()
  • Array.indexOf()
  • Array.concat()
关键:熟练使用filter()方法,去过滤出数组中符合要求的,还有就是下标查找indexOf()的用法。
function diff(arr1, arr2) {
  var newArr = [];
  var newArr1=arr1.filter(function(item,index,arr){
    return arr2.indexOf(item) == -1;
  });
  var newArr2 = arr2.filter(function(item,index,arr){
    return arr1.indexOf(item) == -1;
  });
  newArr =  newArr1.concat(newArr2);
  return newArr;
}

diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);


2.我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。最小的数字并非总在最前面。
sumAll([1, 4]) 应该返回一个数字。
sumAll([1, 4]) 应该返回 10
sumAll([4, 1]) 应该返回10
sumAll([5, 10]) 应该返回 45
sumAll([10, 5])应该返回 45

可能会用到的方法:

  • Math.max()
  • Math.min()
  • Array.reduce()
关键:
function sumAll(arr) {
    var left = Math.min.apply(null, arr);
    var right = Math.max.apply(null, arr);
    var numArr = [];
    for (var i = left; i <= right; i++) {
        numArr.push(i);
    }
    return numArr.reduce(function(x,y) {
        return x + y;
    });
}
sumAll([1, 4]);


你可能感兴趣的:(08-03 js算法题(freecodecamp))