- 博客(53)
- 收藏
- 关注
原创 JavaScript重建二叉树
要求根据前序遍历和中序遍历来重建二叉树.前序遍历: [1,2,4,7,3,5,6,8]中序遍历: [4,7,2,1,5,3,8,6]返回二叉树递归实现1.前序可得: 根的下一个元素为左子根, 右子根在减去中序所得左子根所有元素后的第一个元素.2.中序可得: 左子根在根元素的左边, 右子根在根元素的右边.即根为1,左子根为2,右子根为3从前序获取根元素.即左子根为preOrder[...
2019-03-05 20:08:18 284
原创 LeetCod[206].反转链表1
要求反转一个单链表输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL方法一采用三指针实现使用三个指针,第一次将head.next 反转为 null, 之后current指针每移动一次,反转指针转向一次.var reverseList = function(head) { if(he...
2019-03-05 17:19:34 252
原创 LeetCode[74].搜索二维矩阵(二分查找)
要求编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]]target = 3输出: true示例 2:输入:matrix =...
2019-03-04 20:06:08 403
原创 数组去重
数组去重思路双指针法.i指针作为唯一元素索引.j指针作为遍历索引.遍历一次过程中,只有j指针指向的值与i指针指向的值不同时,才会改变i+1指针指向元素的值.代码var removeDuplicates = function(nums) { let i = 0; for(let j = 0;j < nums.length;j++) { if(nums[j] !== num...
2019-03-03 14:33:55 242
原创 LeetCode[141].环形链表
要求给定一个链表,判断链表中是否有环。代码思路使用双指针,快指针和慢指针,快指针一次移动两个元素,慢指针一次移动一个元素.若非环形,则快指针先到达末尾进行判断.若环形,则当慢指针即将回到起点时,快指针已经与慢指针相遇.设环形链表长度为N,当慢指针即将回到起点时,移动了N-1,而快指针速度是慢指针的两倍,并且其起点为1,即当前快指针位置为1 + (N - 1) + (N - 1) = ...
2018-11-02 19:37:04 113
原创 LeetCode[387].字符中的第一个唯一字符
要求给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = “leetcode”返回 0.s = “loveleetcode”,返回 2.代码lastIndexOf和indexOf实现var firstUniqChar = function(s) { for(let i = 0; i < s.length; i++){ if...
2018-11-02 18:01:18 126
原创 LeetCod[1].两数之和(hash查找优化)
要求给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]代码var twoSum = function(nums,target){ var t...
2018-10-27 01:53:51 184
原创 LeetCode[136].只出现一次的数字
要求给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4代码思路异或实现, 0 ^ N = N, N ^ N = 0.如[1,2,1,2,3]: 0 ^ 1 ...
2018-10-27 01:23:21 133
原创 LeetCode[189].旋转数组
题目给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] ...
2018-10-26 21:57:08 101
原创 LeetCode[26].删除排序数组中的重复项
要求给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nu...
2018-10-26 21:17:32 99
原创 LeetCode[350].两个数组的交集 II
要求给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]代码var intersect = function(nums1,nums2){ let intersectArr = []...
2018-10-26 17:29:54 119
原创 JavaScript实现二叉树广度优先遍历
创建二叉树结构function TreeNode(val) { this.val = val; this.left = this.right = null;}let root = new TreeNode(1)let node2 = new TreeNode(2)let node3 = new TreeNode(3)let node4 = new TreeNode(4)let n...
2018-10-26 16:51:01 3012
原创 JavaScript之迭代算法实现二叉树深度优先遍历
创建二叉树结构function TreeNode(val) { this.val = val; this.left = this.right = null;}let root = new TreeNode(1)let node2 = new TreeNode(2)let node3 = new TreeNode(3)let node4 = new TreeNode(4)let n...
2018-10-23 23:12:09 539
原创 JavaScript实现单链表
功能get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节...
2018-10-21 21:36:50 237
原创 JavaScript实现循环队列(非Array.prototype.pop和Array.prototype.shift)
循环队列优点重用浪费的内存例: [1,2,3,4] -> deQueue -> [null, 2,3,4] -> deQueue -> [null,null,3,4]优于数组已满,无法从队尾将新元素入队,因此用循环队列来重新利用被浪费的空间功能MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素。如果队列为空...
2018-10-19 18:29:39 195
原创 JavaScript解决哈希碰撞
Hash的基本实现定义Hash类function Hash() { this.hash = new Array(128) this.simpleHash = function(key) { // key为字符串 let total = 0 for(let i = 0;i < key.length;i++) { total += key.charCodeAt(i...
2018-10-16 23:43:29 551
原创 真假测试
题目检查一个值是否是原始的布尔值(boolean)类型。返回 true 或者 false要求booWho(true)应该返回 true。 booWho(false)应该返回 true。 booWho([1, 2, 3])应该返回 false。 booWho([].slice)应该返回 false。 booWho({ "a": 1 })应该返回 false。 booWho(1)...
2018-10-08 09:03:34 660
原创 Finders And Keepers
题目请写一个函数来检查一个数组(第一个参数)中的元素,并返回数组中第一个通过校验测试(第二个参数,一个接受一个参数并返回一个布尔值的函数)的元素。如果没有元素通过测试,则返回 undefined。要求findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })应该返回 8。 findElement(...
2018-10-08 08:56:04 252
原创 Truncate a string
题目如果一个字符串(第一个参数)的长度大于给出的值(第二个参数),则截断它并在其后加上 ...。返回被截断的字符串。要求truncateString("A-tisket a-tasket A green and yellow basket", 8)应该返回 "A-tisket..." truncateString("Peter Piper picked a peck of pickl...
2018-10-08 08:43:04 272
原创 检查字符串的结尾
题目检查一个字符串(第一个参数, str)是否以给定的字符串(第二个参数 target)结束要求confirmEnding("Bastian", "n")应该返回 true。 confirmEnding("Congratulation", "on")应该返回 true。 confirmEnding("Connor", "n")应该返回 false。 confirmEndi
2018-10-05 23:58:27 274
原创 返回数组中最大的数字
题目返回一个数组,它要由给出的所有子数组中的最大值组成。简单起见,给出的数组总会包含4个子数组要求largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])应该返回一个数组。 largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], ...
2018-10-05 23:38:21 1614
原创 查找字符串中最长的单词
题目返回给出的句子中最长的单词的长度。你的返回应该是一个数字。 要求findLongestWordLength("The quick brown fox jumped over the lazy dog")应该返回一个数字。 findLongestWordLength("The quick brown fox jumped over the lazy dog")应该返回 6。...
2018-10-05 23:27:00 2601 2
原创 数字的阶乘
题目返回一个给定整数的阶乘要求factorialize(5)应该返回一个数字。 factorialize(5)应该返回 120。 factorialize(10)应该返回 3628800。 factorialize(20)应该返回 2432902008176640000。 factorialize(0)应该返回 1。代码function factorialize(num...
2018-10-05 23:02:40 527
原创 翻转字符串
题目反转给出的字符串代码function reverseString(str) { let strArr = str.split('') strArr.reverse() let result = strArr.join('') return result;}reverseString("hello");
2018-10-05 22:53:41 117
原创 Pairwise
题目找到你的另一半都说优秀的程序员擅长面向对象编程,但却经常找不到另一半,这是为什么呢?因为你总是把自己局限成为一个程序员,没有打开自己的思维。这是一个社群的时代啊,在这里你应该找到与你有相同价值观但又互补的另一半。譬如:你编程能力强,估值11分,如果以20分为最佳情侣来计算,你应该找一个设计能力强,估值为9分的女生。那么当你遇到一个设计能力为9分的女生,千万别犹豫,大胆去表白。千万别以为后面的瓜比
2018-02-01 17:56:04 1305
原创 Map the Debris
题目返回一个数组,其内容是把原数组中对应元素的平均海拔转换成其对应的轨道周期.原数组中会包含格式化的对象内容,像这样 {name: ‘name’, avgAlt: avgAlt}.至于轨道周期怎么求,自行搜索以轨道高度计算轨道周期的公式.求得的值应该是一个与其最接近的整数,轨道是以地球为基准的.地球半径是 6367.4447 kilometers, 地球的GM值是 398600.4418, 圆周率为
2018-02-01 15:50:33 274
原创 Make a Person
题目用下面给定的方法构造一个对象.方法有 getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), and setFullName(firstAndLast).所有有参数的方法只接受一个字符串参数.所有的方法只与实体对象交互.要求Object.keys(bob).length 应该返回
2018-01-31 17:59:27 640
原创 Friendly Date Ranges
题目让日期区间更友好!把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式。易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1).记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了;在这种情况下,如果月份开始和结束日期如果在同一个月,则结束日期月份也不用写了。另外, 如果开始日期年份是当前年份
2018-01-27 17:38:41 513
原创 No repeats please
题目把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, aba, aba, baa, baa), 但是只有两个 (aba and aba)没有连续重复的字符 (在本例中是 a).要求permAlone("aab") 应该返回一个数字.permAlone("aa
2018-01-26 19:02:18 365
原创 Inventory Update
题目依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物名称的字母顺序排列要求updateInventory() 应该返回一个数组.updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "
2018-01-26 15:59:31 476
原创 Exact Change
题目设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) 作为第三个参数.cid 是一个二维数组,存着当前可用的找零.当收银机中的钱不够找零时返回字符串 “Insufficient Funds”. 如果正好则返回字符串 “Closed”.否则, 返回应找回的零钱列表,且由大到小存在
2017-12-09 20:05:02 494
原创 Symmetric Difference
题目创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组.给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2, 3, 4}), 而数学术语 “对等差分” 的集合就是指由所有只在两个集合其中之一的元素组成的集合(A △ B = C = {1, 4}). 对于传入的额外集合 (如 D = {2, 3}), 你应
2017-12-09 16:30:40 650
原创 Validate US Telephone Numbers
题目如果传入字符串是一个有效的美国电话号码,则返回 true.用户可以在表单中填入一个任意有效美国电话号码. 下面是一些有效号码的例子(还有下面测试时用到的一些变体写法):555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555你会看见如 800-692-7753 or 8oo-six4
2017-12-07 16:49:55 193
原创 Arguments Optional
题目创建一个计算两个参数之和的 function。如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果。例如,add(2, 3) 应该返回 5,而 add(2) 应该返回一个 function。调用这个有一个参数的返回的 function,返回求和的结果:var sumTwoAnd = add(2);sumTwoAnd(3) 返回 5。如果两个参数都不
2017-12-06 00:19:13 136
原创 Everything Be True
题目所有的东西都是真的!完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真。函数返回ture。反之,返回false要求every([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa",
2017-12-05 22:31:03 229
原创 Binary Agents
题目传入二进制字符串,翻译成英语句子并返回。二进制字符串是以空格分隔的要求binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 0110011
2017-12-05 22:12:15 217
原创 Steamroller
题目对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套要求steamroller([[["a"]], [["b"]]]) 应该返回 ["a", "b"]。steamroller([1, [2], [3, [[4]]]]) 应该返回 [1, 2, 3, 4]。steamroller([1, [], [3, [[4]]]]) 应该返回 [1, 3, 4]。steamroller([1, {},
2017-12-05 20:50:41 365
原创 Drop it
题目让我们来丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止。第二个参数,func,是一个函数。用来测试数组的第一个元素,如果返回fasle,就从数组中抛出该元素(注意:此时数组已被改变),继续测试数组的第一个元素,如果返回fasle,继续抛出,直到返回true。最后返回数组的剩余部分,如果没有剩余,就返回一个空数组要求drop([1, 2, 3, 4], functi
2017-12-05 20:33:50 163
原创 Finders Keepers
题目写一个 function,它遍历数组 arr,并返回数组中第一个满足 func 返回值的元素。举个例子,如果 arr 为 [1, 2, 3],func 为 function(num) {return num === 2; },那么 find 的返回值应为 2要求find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }) 应
2017-12-05 11:38:10 318
原创 Smallest Common Multiple
题目找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。范围是两个数字构成的数组,两个数字不一定按数字顺序排序。例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小公倍数。要求smallestCommons([1, 5]) 应该返回一个数字。smallestCommons([1, 5]) 应该返回 60。smallestCommons([5, 1]) 应该返回 60
2017-12-05 11:20:48 287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人