关于数组方面的算法分析

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

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;
    // 创建一个对象,然后让这个对象的属性等于数组的值,如果这个对象有这个值,那么说明是重复的那就补添加到新数组中。
}
时间: 2024-10-06 07:53:12

关于数组方面的算法分析的相关文章

当数据结构遇到编程语言——数组

赵振江 数据结构 数组 一维数组 "数组"你真的很了解吗? 数组大家都不是很陌生,它已经"植入"了许多编程语言,但初学者一提到数组,可能不会联想到"数据结构",而是想到的会是一种"数据类型",数组本质上就是一种极其简单的数据结构.所谓数组,就是相同数据类型的元素按一定顺序排列的集合.也就是在内存中划分一段连续的且大小固定(注意是连续)的内存空间(或者其他存储器)保存相同数据类型的数据,如下图.一般说的简单数组,都是静态的数组,

[LeetCode][Java] Search in Rotated Sorted Array II

题目: Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. 题意: 伴随着问题<Search in Rotated Sorted Ar

算法重拾之路——合并排序

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 隶属于递归与分治 合并排序 问题描述:实现对n个元素的排序. 算法描述:不断将待排序的元素分成大小大致相同的两个子集合各自排序,最终将排序好的两个子集合合并.集合不断递归分下去,直至集合元素个数为1. 算法程序: <span style="font-fam

数据结构与算法分析 3.23 — 用一个数组实现三个(多个)栈

一.题目 用一个数组实现三个(或多个)栈 二.解答 用一个数组实现三个乃至多个栈,如果想使用一个数组构造两个栈的思想则行不通: 考虑使用静态链表,数组结点中存在两个域,关键字域与指示栈的前驱的游标,则可以使三个栈可以用一个数组表示: ADT的关键术语: Capacity: 数组的容量: Size: 数组已经存储的数据元素个数: Top_Fst:First栈的栈顶: 三.代码 struct Node; typedef struct Node ElementType; typedef struct

Java算法分析1—————寻找数组相同元素

算法的两个评测指标:运行时间和内存消耗 要么用时间换空间,要么用空间换时间 寻找数组相同元素测试一: 0~99共100个元素各不相同,新加入一个0~99的元素不明确位置 从101个元素数组中找出与0~99元素中重复的一个 /* 找相同元素 * 0~99共100个元素各不相同 * 从101个元素数组中找出与0~99元素中重复的一个 */ public class Dome01 { public static void main(String[] args) { int arr[] = new in

算法分析实验之采花生遗留数组问题的解决

题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”. 鲁宾逊先生和多多都很开心,因为花生正是他们的最爱.在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1). 有经验的多多一眼就能看出,每棵花生植株下的花生有多少.为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生:然后再找出剩下的植株里花生最多的,去采摘它的花生:依此类推,不过你一定要在我限定的

算法分析的正确姿势

[本系列博文会对常见的数据结构及相应算法进行分析与总结,并会在每篇博文中提供几道相关的一线互联网企业面试/笔试题来巩固所学及帮助我们查漏补缺.项目地址:https://github.com/absfree/Algo.由于个人水平有限,叙述中难免存在不清晰准确的地方,希望大家可以指正,谢谢大家:)] 一.前言 在进一步学习数据结构与算法前,我们应该先掌握算法分析的一般方法.算法分析主要包括对算法的时空复杂度进行分析,但有些时候我们更关心算法的实际运行性能如何,此外,算法可视化是一项帮助我们理解算法

算法分析与设计复习

算法分析与设计复习 2016年初,研一上学期期末考试前,复习并总结算法分析与设计科目的内容.复习过程参照<算法导论>中文第2版,同时参照PPT,章节划分根据PPT内容 概要: 第一章 概述 第二章 插入排序&分治策略 第三章 复杂度分析 第四章 堆与堆排序 第五章 快速排序 第六章 线性时间排序 第一章 概述 算法的应用范围 算法在诸如生物等诸多领域有其应用 算法的意义 算法在很多情况下让不可能完成的事情变成了可能,让处理的很慢的过程变快. 一个铺垫 一串不全为0的数,怎么取能拿到一段

拓扑排序之变量序列算法分析

拓扑排序之变量序列 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 题目描述: 假设有n个变量(1<=n<=26,变量名用单个小写字母表示),还有m个二元组(u,v),分别表示变量u小于v.那么,所有变量从小到大排列起来应该是什么样子的呢? 例如有4个变量a,b,c,d,若以知a<b,c<b,d<c,则这4个变量的排序可能是a<d<c<b.尽管还有可能其他的可能,你只需找出其中的一个即可. 输入: 输入为一