1. 集合 由一组无序且唯一的项组成空集:集合里没有任何元素以 [值,值] 的形式存储元素2. 创建集合类 class Set {constructor() {this.items = {};} }这里使用对象来实现,但也可以使用数组。 JavaScript对象不允许一个键指向俩个不同的属性,保证了集合里的元素都是唯一的。 一些常用方法: add(element):向集合添加一个新元素delete(element):从集合移除一个元素has(element):如果元素在集合中,返回true,否则返回falseclea...
1. 什么是字典 类似于集合,字典用来存储唯一值在字典中,存储的是 [键,值] 对,其中键名是用来查询特定元素的字典也称映射、符号表或关联数组在计算机科学中,字典常用来保存对象的引用地址字典的键只能有一个值2. 字典的类和方法 2.1 创建字典类 字典中,键名最理想的情况是字符串,值可以是任何类型。但是JavaScript不是强类型的语言,所有需要将key转换为字符串。 function defaultToString(item) {if (item === null) {retur...
洗牌算法是将原来的数组进行打散,使原数组的某个数在打散后的数组中的每个位置上等概率的出现。 1、抽牌法,随机从原数组抽取一个数到新数组中,原数组则删除抽中的数。 function shuffle_pick(arr){var len = arr.length;var arr2 = new Array();for(var i=len;i>0;i--){var rand = Math.floor(Math.random()*i);arr2.push(arr[rand]);arr.splice(rand,1);}return arr2; }2、第一种方法的优化,不删除原数组的数,而是将最后一张...
xjjdog.cn 对200+原创文章进行了细致的分类,阅读更流畅,欢迎收藏。不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。没错。前端,就是用来坑后端的。我也只能在这里,发表这样无耻的言论。因为xjjdog的修为主要体现在后端上,所以爱屋及乌。这体现了斗争是人类的基本属性:程序员除了要干产品经理、项目经理,内部也并不是铁板一块。不过这次要聊的问题,确实是很坑。它几...
文章目录 一、分治思想二、归并排序1.思路分析2.排序过程演示3.代码实现4.复杂度分析 三、快速排序1.思路分析2.排序过程演示3.编码实现4.复杂度分析一、分治思想 利用分治思想解决问题,我们一般分三步走: 分解子问题求解每个子问题合并子问题的解,得出大问题的解 归并排序和快速排序就是用了这种思想。 二、归并排序 1.思路分析 分解子问题:将需要被排序的数组从中间分割为两半,然后再将分割出来的每个子数组各分割为两半,重...
求字符串出现次数最多字符 let str = "aaabbccccddddd"function longSre(str) {let zifu;let max = 0;let arr = str.split('')let map = new Map()for (let i = 0; i < arr.length; i++) {if (map.has(arr[i])) {let num = map.get(arr[i]) + 1map.set(arr[i], num)} else {map.set(arr[i], 1)}}for (let item of map.keys()) {if (map.get(item) > max) {zifu = itemmax = map.get(item)}}console.log(zifu)console.log(max) } lo...
javascript当中存在两个API:sort和indexOf来实现排序和搜索,但知其然还要知其所以然,下面来看下javascript如何实现排序和搜索算法。 排序算法 1.冒泡排序 时间复杂度:O(n^2). Array.prototype.bubbleSort = function () {for (let i = 0; i < this.length - 1; i++) {for (let j = 0; j < this.length - 1 - i; j++) {if (this[j] > this[j + 1]) {const temp = this[j];this[j] = this[j + 1];this[j + 1] = temp;}}} };var a...
转载自 力扣 剑指Offer 第五题 思路整理:大致方法: 双指针此想法来自于JS题解点赞量最高的大佬 膜拜大佬~首先我们要了解 英文的空格符 占了一个字符单位 中文的空格符 占了两个字符单位此题 为英文空格符题中 将空格替换成 '%20'占了三个字符单位本题运用双指针 需要比较原字符串长度 和 新占位字符串长度的关系空格 占 1单位 %20 占3单位 我们记录下原字符串 中空格的数量 得出关系newLength=oldLength+count*2我们得出了...
声明:图片及内容基于:https://www.bilibili.com/video/BV16C4y1H7Zc?from=articleDetail 最短路径Dijkstra算法 原理 数据结构核心代码findMinDist()int MGraph::findMinDist(){int length=INFINIT;for(int i=0;i<vertexNum;i++){if(s[i]==0){if(length>dist[i]&&dist[i]!=0&&dist[i]!=INFINIT){length=i; //注意记录的是下标,我原来写成length=dist[i]了,太惨了 }}}return length; }displayPath()void MGraph::displayPath(...
8个球有一个重一点,最少称几次能找出来 算法题 用一个 托盘天平 来计算 方法1:3次 第1次 两边 4个 筛选出存在重的一边4个 第2次 两边 2个 筛选出存在重的一边2个 第3次 两边 1个 筛选出存在重的一边1个 方法2:2次 第1次 两边 3个 筛选出存在重的一边3个 如果两边一样重,说明重的在没称重的剩余2个中, 第2次情况1 剩余的两个在称一次分辨出重的哪一个 如果两边不一样重,说明重的在重的那...
哈希表(hash table ) 是一种根据关键字直接访问内存存储位置的数据结构,通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数 。 常用方法: put(key, value) 插入&修改操作get(key) 获取元素remove(element) 删除元素size() 查看集合元素个数其它:自动扩容/缩容 // 封装哈希表类 function HashTable() {// 属性: 数组(链址法)、 记录当前数组元素个数、 数组长度t...
栈(stack) 又名堆栈 ,数据特点:后进先出。由于其数据形式特点,故用 数组搭建。 常用方法有: push() 入栈pop() 出栈peek() 查看栈顶元素isEmpty() 判断是否为空length() 获取栈中元素的个数toString() 方法 // 封装栈类 function Stack {// 栈中的属性this.items = [];// 栈的相关操作// 1 将元素压入栈Stack.prototype.push = function (element) {this.items.push(element)}// 2 从栈中取出元素Stack.prototype.pop = funct...
js的 算法 参考:https://blog.csdn.net/weixin_41082623/article/details/81988836一、排序算法1、冒泡排序:1)比较相邻的两个元素,如果前一个比后一个大,则交换位置。2)第一轮的时候最后一个元素是最大的一个。3)按照步骤一的方法进行相邻两个元素的比较,由于最后一个元素已经是最大的了,因此最后一个元素不用比较。 var arr = [10,20,5,8,21,100,99];for(var i = 0;i<arr.length;i++) {for(var k = 0; k < arr.length...
JS算法笔记—二分查找//二分查找是一种基于比较目标值和数组中间元素的教科书式算法。 //如果目标值等于中间元素,则找到目标值。 //如果目标值较小,继续在左侧搜索。 //如果目标值较大,则继续在右侧搜索。 //时间复杂度:O(logN)。 空间复杂度:O(1)。//二分查找var search = function(nums, target) {let left = 0; // 初始左边界let right = nums.length - 1; // 初始右边界// 如果left > right 证明整个数组结束了仍没有找到...
本文参考文献:http://ahuntsun.top/navitem/algorithm/theory/notes/11.html 配套视频教程:https://www.bilibili.com/video/BV1r7411n7Pw?p=1&spm_id_from=pageDriver目录 排序算法大O表示法常见的表示形式推导规则排序算法基本类的封装冒泡排序实现思路代码实现:效率选择排序实现思路实现代码效率插入排序实现思路实现代码效率希尔排序实现思路增量gap的选择实现代码效率快速排序实现思路分区函数实现递归实现循环实现效率排序...