js 算法一

1 写一个函数,去掉a数组中和b数组中相同的元素。

思路一:让a数组中的元素和b数组中的元素逐个比较,若相同,则删除。

方法一:

function array_diff(a, b){
    for(var i = 0; i < a.length; i++){
        for(var j = 0; j < b.length; j++){
            if(a[i] == b[j]){
                a.splice(a.indexOf(b[j]), 1); //删除
                j = -1;  //必须保证a中的每一个元素都从b的第一个元素开始遍历
            }
        }
    }
    return a;
}
var a = ["c", "a", "b", "a", "d"];
var b = ["a", "b"];
console.log(array_diff(a, b));

思路二: 让b数组中的元素和a数组中的元素逐个比较,若相同,则删除。

方法二:

function array_diff(a, b) {
    for(var i = 0; i < b.length; i++)
    {
        for(var j = 0; j < a.length; j++)
        {
            if(a[j] == b[i]) {
                a.splice(j,1);
                j = j - 1;  //保证a中从删除后的元素开始继续遍历
            }
        }
    }
    return a;
}

注意: 这两种方法思路类似,都可以实现要求,需要注意的是必须保证所有的元素都要遍历到,这样才能做正确判断。

方法三:特殊技巧

function array_diff(a, b) {
    var temp1 = []; //临时数组1
    var temp2 = []; //临时数组2

    for (var i = 0; i < b.length; i++) {
        temp1[b[i]] = true; //巧妙地方:把数组B的值当成临时数组1的键并赋值为真
        //console.log(temp1);
    };

    for (var i = 0; i < a.length; i++) {
        if (!temp1[a[i]]) {
            temp2.push(a[i]);
            // 巧妙地方:同时把数组A的值当成临时数组1的键并判断是否为真,
            // 如果不为真说明没重复,就合并到一个新数组里,这样就可以得到一个全新并无重复的数组
        } ;
    };
    return temp2;
}
时间: 2024-10-14 10:29:27

js 算法一的相关文章

数据结构与算法一

题目一:求1!+2!+-..+n! 的和的后6位,(注意n的范围) #include <iostream> using namespace std; const int MAX = 1000000; int getResu(int n) { int sum=0; int temp= 1; for(int i=1; i <= n; i++) { temp *= i; temp %= MAX; sum += temp; sum %= MAX; } return sum ; } int mai

大数据处理算法一:Bitmap算法

腾讯面试题:给20亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中并且所耗内存尽可能的少? 解析:bitmap算法就好办多了 所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况.通常是用来判断某个数据存不存在的. 例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示.那么就可以开一个int数组,一个int有32个位,就可以表示32个人.操作的时候可以使用位操作. 一,

区块链入门教程以太坊源码分析fast sync算法一

区块链入门教程以太坊源码分析fast sync算法一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上.this PR aggregates a lot of small modifications to core, trie, eth and other packages to collectively implement the eth/63 fast synch

js语法一

文档对象模型(DOM): document object model(整合js,css,html)浏览器对象模型(BOM): broswer object model(整合js和浏览器) 引用方式: <script> alert();弹窗打印</script> <script src=""></script> 语言: 变量数据类型运算符流程控制语句函数类和对象 //单行注释/*多行注释*/ 变量声明:(先声明,再赋值)var a=20;

Solr相似度算法一:Lucene TF-IDF 相关性算分公式

Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很复杂,但是它其实只包含了两个简单规则 某个词或短语在一篇文章中出现的次数越多,越相关 整个文档集合中包含某个词的文档数量越少,这个词越重要 所以一个term的TF-IDF相关性等于 TF * IDF 这两个规则非常简单,这就是TF-IDF的核心规则,第二个的规则其实有缺陷的,他单纯地认为文本频率小的

js 算数组平均值、最大值、最小值、偏差、标准差、中位数、数组从小打大排序、上四分位数、下四分位数

要算的数组命名为data var sum = function(x,y){ return x+y;}; //求和函数 var square = function(x){ return x*x;}; //数组中每个元素求它的平方 var data = [1,1,3,5,5]; // var mean = data.reduce(sum)/data.length; var deviations = data.map(function(x){return x-mean;}); var stddev =

PCB 板边倒圆角的实现方法(基本算法一)

当PCB外形是直角时,通常工程制作外形(锣带)时,会将直角或尖角的地方倒成圆角,主要是为了防止板边容易划伤板且容易扎伤人 所以当客户没有特殊要求时,PCB外形是直角一般会默认倒角0.5mm圆角(如下图所示)  一.PCB板边倒圆角点分析 原PCB外形  如下图图示:看了这个PCB外形,产生有2个问题点. 1.外形中哪些点需倒圆角? 2.如何怎么倒圆角? 1.外形中哪些点需倒圆角? 看下图: PCB外形倒圆角的点,刚好就是我们凸包需求出的点,接下来我们将玩转凸包了,只要求出凸包,那么就可以实现PC

排序算法一:插入排序(Insertion sort)

最近从网易公开课在看麻省理工学院的公开课<算法导论>,感觉还不错,接下来几篇文章所示学习日记了,不准备对算法细节做过多描述,感兴趣的可以自己去看. 文章分几篇讲经典排序算法,直接上代码,根据结果对算法性能有个直观了解.本篇先说插入排序(insertion sort). (一)算法实现 1 protected void sort(int[] toSort) { 2 if (toSort.length <= 1) { 3 return; 4 } 5 for (int i = 1; i <

泛型算法一

1.accumulate:计算给定区间值的累加和 2.函数原型(#include <numeric>) template<class InputIterator, class Type> Type accumulate( InputIterator _First, InputIterator _Last, Type _Val ); template<class InputIterator, class Type, class BinaryOperation> Type