关于数组方面的算法分析

Posted 追梦子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于数组方面的算法分析相关的知识,希望对你有一定的参考价值。

/** 删除数组中指定索引的数据 **/

Array.prototype.deleteAt = function (index) {
    if (index < 0) {
        return this;
    }
    // 截取要删除索引之前的值,然后和之后的值合并。
    return arr.slice(0,index).concat(arr.slice(index+1));
}

/** 数组洗牌 **/

Array.prototype.random = function () {
    var tempArr = [], me = this, t;
    // 如果当前数组的len大于0的话执行
    while (me.length > 0) {
        // 让当前数组的长度乘以随机数,避免是小数,取整   因为随机数是一个小于0的数,所以乘以数组的长度最大只会是数组的长
        t = Math.floor(Math.random() * me.length);
        // 通过一个临时数组保存那个随机数里面的数组值。
        tempArr[tempArr.length] = me[t];
        // 删除那个已经添加到临时数组里面的值。
        me = me.deleteAt(t);
    }
    return tempArr;
    // 原理,从原数组中随机抽出一个数添加到临时数组中,然后删除将原数组中抽取出来的那个值。
}
Array.prototype.orderRandom = function () {
    return this.sort(function (a,b) {
        return Math.random() > 0.5 ? a<b : a>b;
    });
       // 因为sort函数会将数组中的前一个值和后一个值循环进行比较,根据排序的规则进行交换位置,然后我们可以通过一个随机数判断它是否大于0.5一半的值,如果大于就让它怎么样排序,否则怎么样排序,总之不要让这个排序一样。
}

/** 数字数组排序 **/

Array.prototype.sortNum = function (i) {
    if (!i) {
        i = 0;
    }
    if (i == 1) {
        return this.sort(function (a, b) {
            return b - a;
        });
    }
    return this.sort(function (a, b) {
        return a - b;
    });
    // 如果传入的值小于0等于0则按从小到大排序,如果等于1从大到小排序。
}

/** 获取数字数组中的最大项 **/

Array.prototype.getMax = function () {
    return this.sortNum(1)[0];
    // 从大到小排序,然后获取第一位
}

/** 获取数字数组中的最小项 **/

Array.prototype.getMin = function () {
    return this.sortNum(0)[0];
    // 从小到大排序,然后获取第一位
}

/** 数组第一次出现指定元素的位置 **/   追梦子博客园

Array.prototype.indexOf = function (o) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == o) {
            // 如果找到这个值直接返回这个值,退出函数
            return i;
        }
    }
    // 找不到返回-1
    return -1;
}

/** 去除数组中的重复项 **/

Array.prototype.arrUnique = function () {
    var reset = [], done = {};
    // 创建一个数组和一个临时对象,数组用来保存去掉重复以后的值,对象用来判断
    for (var i = 0; i < this.length; i++) {
        // 创建一个变量,让它等于当前数组索引的值
        var temp = this[i];
        // 如果这个对象的属性没有数组里面的值,就给这个对象添加这个数组的值
        if (!done[temp]) {
            done[temp] = true;
            // 把这个值添加到新数组中
            reset.push(temp);
        }
    }
    return reset;
    // 创建一个对象,然后让这个对象的属性等于数组的值,如果这个对象有这个值,那么说明是重复的那就补添加到新数组中。
}

 

以上是关于关于数组方面的算法分析的主要内容,如果未能解决你的问题,请参考以下文章

几个关于js数组方法reduce的经典片段

算法零基础学习关于二维数组的一些基础练习题 | leetcode1672158283248题解

算法零基础学习关于二维数组的一些基础练习题 | leetcode1672158283248题解

算法零基础学习关于二维数组的一些基础练习题 | leetcode1672158283248题解

关于代码片段的时间复杂度

C语言100个经典算法源码片段