![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaScript数据结构与算法
文章平均质量分 52
今天会下雨吗
多动脑思考吧
展开
-
JavaScript实现深拷贝
深拷贝//编写一个深度克隆函数function deepClone(obj) { // 1. 如果传过来的obj不是对象或者为空,则返回 if (typeof obj !== 'object' || obj == null) return obj; // 2. 判断传过来的obj是否为数组 let newObj = (obj instanceof Array) ? [] : {}; // 3. 通过for in循环访问对象属性 for(let key原创 2021-10-04 20:36:45 · 84 阅读 · 0 评论 -
n&(n-1)的妙用
n&(n-1)的妙用LeetCode上342题求解4的幂的时候,官方解答使用了n&(n-1)。我们来说一说n&(n-1)的原理。一个数n是4的幂,那么他也是2的幂,并且n一定是正整数按位与运算符&:如果两位都是 1 则设置每位为 1,有一位不为1则设置每位为0。W3school中给出的例子:5 & 1 -> 10101 & 0001 = 0001 = 12的幂n的特点:n的二进制表示中仅在最高位包含一个1,例如:原创 2021-05-31 16:06:40 · 138 阅读 · 0 评论 -
JavaScript数据结构与算法 - 哈希表详解
哈希表通常是基于数组进行实现的,但是相对于数组,它也很多的优势和不足.优势:它可以提供非常快速的插入-删除-查找操作无论多少数据,插入和删除值需要接近常量的时间:即O(1)的时间级.实际上,只需要几个机器指令即可完成哈希表的速度比树还要快,基本可以瞬间查找到想要的元素哈希表相对于树来说编码要容易很多.不足:哈希表中的数据是没有顺序的,所以不能以一种固定的方式(比如从小到大)来遍历其中的元素通常情况下。哈希表中的key是不允许重复的,不能放置相同的key.用于保存不同的元素.1. 哈原创 2021-05-31 10:44:54 · 618 阅读 · 0 评论 -
JavaScript - 不使用任何内建的哈希表库设计一个哈希映射(HashMap)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>lee原创 2021-05-31 10:42:41 · 215 阅读 · 1 评论 -
LeetCode - 705. 设计哈希集合
1. 题目描述不使用任何内建的哈希表库设计一个哈希集合(HashSet)。实现 MyHashSet 类:void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。示例:输入:["MyHashSet", "add", "add", "contains", "contains", "add", "contains原创 2021-05-30 11:12:19 · 92 阅读 · 0 评论 -
JavaScript数据结构与算法 - 链表详解
链表链表和数组一样,可以用于存储一系列连续的元素链表中的元素在内存中不必是连续的空间链表的每一个元素有一个由一个存储元素本身的节点和一个指向下一个元素的引用组成(指针和连接)链表的优点内存空间不是必须连续的,可以充分利用计算机的内存,实现灵活的内存动态管理链表不必在创建时就确定大小,并且大小可以无限的延伸下去链表在插入和删除数据时,时间复杂度可以达到O(1),相对数组效率高很多1. 链表结构的封装封装LinkedList的类,用于表示我们的链表结构。 (和Java原创 2021-05-27 21:34:06 · 315 阅读 · 3 评论 -
Leetcode - 13. 罗马数字转整数
1. 题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V +原创 2021-05-27 21:29:47 · 58 阅读 · 0 评论 -
Leecode - 9. 回文数(JavaScript版)
题目描述给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例:输入:x = 121输出:true输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。输入:x = -101输原创 2021-05-23 13:02:43 · 128 阅读 · 0 评论 -
Leecode - 7. 整数反转(JavaScript版)
题目描述给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例:输入:x = 123输出:321输入:x = -123输出:-321输入:x = 120输出:21输入:x = 0输出:0输入:x = 1534236469输出:0提示:-231 <= x <= 231 - 1负数负原创 2021-05-22 21:17:51 · 194 阅读 · 3 评论 -
Leecode - 2. 两数相加(JavaScript版超详细)
题目描述给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。按照题目,我们要将两个链表的值逆序存储,然后将他们的值相加,在逆序输出示例:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.输入:l1 = [0], l2 = [0]输出:[0]输入原创 2021-05-21 12:09:36 · 651 阅读 · 2 评论 -
Leecode - 1. 两数之和(javascript版)
题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。注:按照题目的意思,求解得到的数组只能有两个元素,且不重复解答1. 两个for循环暴力求解遍历求第二个元素时,使其为i+1,可以避免跟i重复var twoSum = function(nums, target) { // var arr =原创 2021-05-19 10:23:37 · 115 阅读 · 0 评论 -
牛客JavaScript - 使用arguments
题目描述函数 useArguments 可以接收 1 个及以上的参数。请实现函数 useArguments,返回所有调用参数相加后的结果。本题的测试参数全部为 Number 类型,不需考虑参数转换。示例输入1, 2, 3, 4输出10题目分析本题考察了对Arguments对象实例arguments的使用arguments详细说明请查看MDNJavascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数都会有一个Arg原创 2021-04-22 16:57:04 · 99 阅读 · 0 评论 -
牛客JavaScript算法题 - 将函数fn的执行上下文改为obj对象
题目描述将函数 fn 的执行上下文改为 obj 对象题目分析:函数的执行上下文就是函数中 this 所指向的对象,那么题目的要求就是 -> 把函数fn的this指向 obj 对象函数中的 this 指向和函数的定义位置、执行位置无关函数中 this 的指向只取决于函数的调用方式示例输入function () {return this.greeting + ', ' + this.name + '!!!';}, {greeting: 'Hello', name: 'Rebecca原创 2021-04-19 21:13:09 · 360 阅读 · 0 评论 -
牛客JavaScript算法题 - 将数组 arr中的元素作为调用函数 fn的参数
题目描述将数组 arr 中的元素作为调用函数 fn 的参数示例输入function (greeting, name, punctuation) {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!']输出Hello, Ellie!1. 调用函数的方法详细的可参照JavaScript教程JavaScript函数调用这里介绍其中的一种作为函数方法调用函数call()和apply原创 2021-04-19 20:53:28 · 226 阅读 · 0 评论 -
JavaScript数据结构-深拷贝和浅拷贝
浅拷贝浅拷贝只拷贝一层(简单数据类型的),更深层次对象级别的只拷贝引用var obj = { id:1, name: 'andy', msg:{ age:18, }, color:['pink','red'],};var o = {};//两种浅拷贝方式//1.通过循环遍历for(var k in obj){ //k是属性名 obj[k]属性值 o[k] = obj[k];}//2.通过assign()进行拷贝,有两个参数原创 2020-12-01 21:36:20 · 288 阅读 · 0 评论 -
JavaScript数据结构与算法-使用优先级队列给元素排序
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script> //封装优先级队列 function PriorityQueue(){ //在PriorityQueue重新创建一个类:可以理解成内部类 function QueueEle原创 2020-10-15 21:33:01 · 109 阅读 · 0 评论 -
JavaScript数据结构与算法-栈实现十进制转二进制和n进制的转换
1.栈实现十进制转二进制<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script> //封装栈类 function Stack(){ //栈中的属性 this.items = []; //栈的相关操作 /原创 2020-10-15 16:18:13 · 278 阅读 · 1 评论