数据结构
梅子丨朱
孤独是一个人的狂欢
展开
-
每日一题:求出dom中某个元素(span)出现的次数
It is so eazy!<html><head><title>span计数</title></head><body><div class="scroll"> <span>span计数1</span> <span>span计数2</span> <span>span计数3</span> <span>span计数原创 2020-10-19 13:20:57 · 340 阅读 · 0 评论 -
每日算法:instanceof 关键字方法重写
思路:instanceof 函数功能是用于检测构造函数的prototype是否在某个实例的原型链上。那么我们可以先获取该构造函数的原型链,一一检测,如果该实例的原型链上有该构造函数的原型,那么返回true,否则返回false。function instanceOf(left,right) { let protoLeft = Object.getPrototypeOf(left);//获取对象的直接原型链上的原型 let protoRight = right.prototype; while原创 2020-10-14 10:05:25 · 248 阅读 · 0 评论 -
每日算法:一道大厂常考的代码题
这是一道大厂常考的代码题 Input: 'aaaabbbccd' Output: 'a4b3c2d1',代表 a 连续出现四次,b连续出现三次,c连续出现两次,d连续出现一次 本题乍看非常简单,没啥难度,动手其实往往会卡壳,如果面试时会紧张,催你你会手足无措。平时多练习吧哈哈哈。function count(str) { //设计一个二维数组分别储存a,b,c,d等等。内层数组的长度就是统计次数 let arr = []; for(let i=0; i<str.原创 2020-10-13 09:37:15 · 309 阅读 · 0 评论 -
大厂面试:js 闭包的深刻理解(实例分解:如何实现无限累加的一个函数)
题目:实现一个无限累加的js函数sum(1, 2, 3).valueOf() //6sum(2, 3)(2).valueOf() //7sum(1)(2)(3)(4).valueOf() //10sum(2)(4, 1)(2).valueOf() //9分析:js里的闭包常见的是用函数作为返回值,那么,就会出现func()()这种形式的函数,也叫立即执行函数。故联想到本题应该利用闭包来实现上述函数。重点:利用返回值是一个函数来接收下一个括号里的参数值,至于有多少层,我们不用关心。st原创 2020-10-12 13:16:42 · 1170 阅读 · 0 评论 -
每日算法:给定一个二叉树,找出其最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree著作权归领扣网络所有。商业转载请...原创 2020-09-29 15:30:29 · 1826 阅读 · 0 评论 -
每日算法:快速排序详解以及手动实现
快速排序重点在于分区和递归,第一趟取第一个数,然后比这个数小的分到左边,比这个数大的分到右边。那么分区操作需要l,r和arr[l]三个参数,l表示左边开始位置,r便是右边开始位置,arr[l]l表示左边开始位置的数。这样就便于我们接下来进行分治法以及递归操作。其中分区方法可以利用循环比较,小的放左边,大的放右边。最为经典的方法就是挖坑填数法。例如:arr = [5,1,3,4,8,3,7,2]X = 5第一个坑为5,首先从arr从右到左找到第一个小于X=5的值为2,2放到5的位置,那么下一.原创 2020-09-28 15:59:12 · 413 阅读 · 0 评论 -
每日算法:冒泡,选择,插入排序第二次写
好久不复习,总是会卡耶 哈哈哈 再来一次let arr = [9,4,5,64,2,5,811,7,53,6,3,2,1,22,11,55,88,77,88,99,100]let arr1 = [9,4,5,64,2,5,811,7,53,6,3,2,1,22,11,55,88,77,88,99,100]let arr2 = [9,4,5,64,2,5,811,7,53,6,3,2,1,22,11,55,88,77,88,99,100]function sortBubble(arr){ l原创 2020-09-24 10:29:29 · 192 阅读 · 0 评论 -
每日算法:把一个数尽量分解为大于1和尽可能小的整数相乘
function getMember(num) { let n = 2; let arr = [] while(num !== n && num > n){ if(num % n === 0){ num = num / n; arr.push(n); } else { n++; } } arr.push(num); return arr;}console.log(getMember(80))//.原创 2020-09-23 10:00:43 · 552 阅读 · 0 评论 -
每日算法:分别按照二叉树先序,中序和后序打印所有的节点
题目描述分别按照二叉树先序,中序和后序打印所有的节点。示例1输入{1,2,3}输出[[1,2,3],[2,1,3],[2,3,1]]简单的递归算法:function threeOrders( root ) { // write code here let p1 = [] let p2 = [] let p3 = [] function pre(ro){ if(!ro){ return p1原创 2020-09-19 14:50:25 · 1610 阅读 · 0 评论 -
每日算法:设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能
题目描述设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构 get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1) 某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。 当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。若opt=1,接下来两个整数x, y,表示set(x, y)若opt=2,接下来一个整原创 2020-09-17 23:38:23 · 867 阅读 · 0 评论 -
每日算法:输入一个链表,反转链表后,输出新链表的表头。
链表头指针指向头节点,尾指针指向null的有序指向。反转之后头节点应该是之前的尾结点。反转思路1.初始化一个pre结点null 作为反转之后的尾指针指向。2.改变后续结点的nod.next指向为pre。3.但是nod.next我们应当作备份,不然改变2种指向就找不到了,新建一个结点backup作为备份。循环1.做完第一波操作,backup结点和pre结点以及nod需要向后移动一位,nod就是我们备份的backup。2.backup结点向后移动一位。3.pre向后移动一位。原创 2020-09-17 21:53:11 · 295 阅读 · 0 评论 -
数据结构之java实现搜索二叉树以及树遍历
搜索二叉树概念介绍搜索二叉树是一种方便检索的二叉树数据结构,其特点是左节点以及左子树上的点<根节点<右节点以及右子树结点的值,那么构建的搜索二叉树就是有序树。其结构为:搜索二叉树遍历搜索二叉树和二叉树类似,同样又前序遍历,中序遍历和后序遍历,其通通可以用递归的方式实现。java实现如下(其他语言亦是异曲同工):public class TowSearchTree { public static TreeNode tree = null; public st原创 2020-06-28 23:41:55 · 339 阅读 · 0 评论 -
Java,python以及等等的浮点数丢失精度的问题
看,那是什么?public class sixTowTow { public static void main(String[] args) { System.out.println(0.1+0.2); }}输出:其实关于浮点数精度丢失的问题,不光是java存在,是因为计算机对于数字运算的时候都需要转换成二进制的方式,整数都能转换成二进制。例如:59 /2=25 ......125/2=14 ...... 114/2=7 ......07/2原创 2020-06-23 09:16:23 · 636 阅读 · 0 评论 -
心中永远有一颗二叉树
二叉树定义:二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称空二叉树),或者由一个结点互不相交的,分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点每个节点最多有两个结点,也就是说可能有0,1,2个结点。 左子树和右子树是有区别的,就算没有左子树,右子树也是在右边。如下图两颗二叉树事不一样的树。 特殊二叉树斜树所有结点之后左子树或者右子树的叫斜树,往左边斜的叫左斜树,右边斜的叫右斜树。满二叉树...原创 2020-06-18 17:32:15 · 373 阅读 · 0 评论 -
java自己动手之插入排序实现
人面不知何处去,桃花依旧笑春风。import java.util.Arrays;public class insertSort { public static void main(String[] args) { int[] arr = {50,32,54,89,7,4,5,2,45,45,564,456,21,5,644,7,9,7,654,4,1}; for(int i=1;i<arr.length;i++){//外层循环列表所有元素原创 2020-05-11 13:48:59 · 211 阅读 · 0 评论 -
Java自己动手之选择排序实现
天青色等烟雨,而我在等你。import java.util.Arrays;public class chooseSort { public static void main(String[] args) { int[] arr = {50,32,54,89,7,4,5,2,45,45,564,456,21,5,644,7,9,7,654,4,1}; int temp = 0; int flag = 0; for(int i=0原创 2020-05-08 17:41:54 · 214 阅读 · 0 评论 -
java自己动手之冒泡排序兼优化
我寄愁心与明月,随风直到夜郎西。import java.util.Arrays;public class Bubbling { public static void main(String[] args) { boolean flag = true; int a = 0; int[] arr = {50,32,54,89,7,4,1...原创 2020-05-08 15:48:44 · 208 阅读 · 0 评论 -
数据结构之链式堆栈java实现
数据结构里经常把堆栈和队列放一起,个人感觉堆栈和队列的实现方式难度差不多,仅当动手学习,参靠参考。public class stackLinkList { public static StackNode[] arr; public static void main(String[] args) { StackNode no = new StackNode("a...原创 2020-04-01 12:22:27 · 271 阅读 · 0 评论