摘要:我们从一道笔试题说起: var str = 'string'; str.pro = 'hello'; console.log(str.pro + 'world'); 输出啥?要理解这个问题,我们得从头说起。 Javascript 数据类型分两大类,基本类型(或者说是原始类型)和引用类型。...
阅读全文
摘要:关于二叉树的定义,以及什么是二叉树的三种遍历(先序遍历,中序遍历,后序遍历),不是本文关注的重点,请自行查阅相关资料。本文的重点是 如何用递归和迭代分别实现二叉树的三种遍历 。 leetcode上有三道题分别求三种遍历结果: "Binary Tree Preorder Traversal" 、 "B
阅读全文
摘要:"Jump Game" 是一道有意思的题目。题意很简单,给你一个数组,数组的每个元素表示你能前进的最大步数,最开始时你在第一个元素所在的位置,之后你可以前进,问能不能到达最后一个元素位置。比如: A = [2, 3, 1, 1, 4], return true.一种走法是 ,还有一种走法是 O(...
阅读全文
摘要:"前文" 我们探讨了树状数组的原理。树状数组就是一种数据结构,它天生用来维护数组的 前缀和 ,从而可以快速求得某一个区间的和,并支持对元素的值进行修改。但是树状数组并非只有这一种功能,变形后它还能衍生出两个功能,本文我们就来分别讨论下树状数组这三大功能。 永远要记住,基本的树状数组维护的是数组的前缀
阅读全文
摘要:最近在学习位运算,正好把树状数组总结下,也算是能正式给 建个分类。 那么,树状数组到底有什么用呢?诚然,一样没什么卵用的东西我们学它干嘛。 下面举个树状数组的经典应用: 区间求和 。 假设我们有如下数组(数组元素从 开始): var a = [X, 1, 2, 3, 4, 5, 6, 7, 8, 9
阅读全文
摘要:最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识。 把一个数变为大于等于该数的最小的2的幂 一个数为2的幂,那么该数的二进制码只有最高位是1。根据这个性质,我们来举个栗子,比如有数字10,转为二...
阅读全文
摘要:接上文 "leetcode 位运算题目汇总(上)" ,继续来切leetcode中 "Bit Manipulation" 下的题目。 "Bitwise AND of Numbers Range" 给出一个范围,[m, n](0 <= m <= n <= 2147483647),返回这些数字的与运算结...
阅读全文
摘要:最近在看位运算的知识,十分感叹于位运算的博大精深,正好leetcode有 "Bit Manipulation" 的专题,正好拿来练练手。 "Subsets" 给出一个由不同的数字组成的数组,枚举它的子数组(子集)。这道题我之前用递归解过,而且效率还不错(beat 83.33%),解法如下不加详述了...
阅读全文
摘要:"Single Number" 这一系列有三道题,第一题也是最简单最经典的。 有一个数组,里面的元素每个都出现了两次,除了一个特殊的,求这个特殊元素。接触过这类题目的coder很快能够脱口而出:直接异或就ok了!的确如此: var singleNumber = function(num...
阅读全文
摘要:"前文" 我们了解了快速排序算法的实现,本文我们来了解下另一种流行的排序算法 归并排序算法。 我们先来回顾下快排。快排的核心是找出一个基准元素,把数组中比该元素小的放到左边数组,比该元素大的放到右边数组,如果左边数组和右边数组分别有序,那么leftArray+midItem+rightArray就是
阅读全文
摘要:本文我们来讲讲二进制的经典应用 求二进制的逆序。本文的重点除了算法本身外,还有 和` `的神奇应用。leetcode中有道具体的题目 "Reverse Bits" ,题目很简单,给你一个 32位无符号整数 ,比如43261596(00000010100101000001111010011100),返...
阅读全文
摘要:说到位运算的经典应用,不得不说N皇后问题。学过程序设计的都知道N皇后问题,没听过也没关系。很简单,最传统的的N皇后问题是这个样子的,给你一个n n大小的board,让你放n个皇后(国际象棋),要满足任意两个皇后不能在一条水平线上,不能在一条垂直线上,也不能在一条45度的斜线上。听起来似乎和数独挺像,...
阅读全文
摘要:前面我们已经了解了六大位操作符( `| ~` `<< `)的用法( "javascript 位运算" ),也整理了一些常用的位运算操作( "常用位运算整理" ),本文我们继续深入位运算,来了解下二进制的经典应用 标志位与掩码。位运算经常被用来创建、处理以及读取标志位序列——一种类似二进制的变量。虽然...
阅读全文
摘要:位运算优先级 ( + ) ( << ) ( ~ & ^ | ) 右边第k位系列 var x = 18; // 10010 // 取右边第k位 // x (k 1) & 1 console.log(x (2 1) & 1); // 1 // 把右边第k位变为0 // x & ~(1 << (k 1...
阅读全文
摘要:作为算法目录下的第一篇博文,快速排序那是再合适不过了。作为最基本最经典的算法之一,我觉得每个程序员都应该熟悉并且掌握它,而不是只会调用库函数,知其然而不知其所以然。 排序算法有10种左右(或许更多),耳熟能详的冒泡排序、选择排序都属于复杂度O(n^2)的“慢”排,而快排的复杂度达到了O(nlongn
阅读全文
摘要:1、Attribute Attribute是HTML上设置的属性,在html中显式地设置,或者通过 方法设置。 比如这样一段html代码,实际上它有三个attribute属性,我们可以打印出来看看: var a = document.getElementById('txt'); console.lo
阅读全文
摘要:位运算博大精深,本文总结下基本的位运算的概念。 1、整数的二进制码 位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。ECMAScript中的所有数值都以IEEE 754 64位格式存储,但位操作符并不直接操作64位的值。而是先将64位的值转换成32位的整数,然后执行操作,最后再将结...
阅读全文