自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zjw_python的博客

人生苦短,我用Python

原创 100道最常见的校招前端面试题(更新中)

Http协议中Post和Get方法的区别?如何利用CSS实现三角形?常见的跨域技术有哪些?如何利用CSS2实现元素水平垂直居中?rem和em的区别?闭包是什么?有什么用?图像懒加载的原理是什么?git pull 和 git fetch方法的区别?Https的主要特点?position属性?...

2018-09-24 17:00:47 7730 3

原创 179. 最大数(JS实现)

1 题目给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。链接:https://leetcode-cn.com/problems/largest-number2 思路这道题思路就是如何将数组里面的数字进行排序,使得组合的数字最大,比较方法简单来说,两个数字a和b,比较ab和ba的大小,例如30和34,

2020-08-05 21:34:07 29

原创 173. 二叉搜索树迭代器(JS实现)

1 题目实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 trueiterator.next(); // 返回 9iterator.hasNext(); //

2020-08-05 21:27:45 48

原创 172. 阶乘后的零(JS实现)

1 题目给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes2 思路这道题要知道n!有多少个0,可以转换为 1...n这一系列数里面,有多少能被5整除,例如1...

2020-08-05 21:16:13 36

原创 169. 多数元素(JS实现)

1 题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2链接:https://leetcode-cn.com/problems/majority-element2 思路这道题我是用hash表做的,题解有种更巧妙的Boyer-Moore 投票算法,只需要O(1)的空间复杂度

2020-08-05 21:08:26 32

原创 168. Excel表列名称(JS实现)

1 题目给定一个正整数,返回它在 Excel 表中相对应的列名称。例如,1 -> A2 -> B3 -> C…26 -> Z27 -> AA28 -> AB…示例 1:输入: 1输出: “A”示例 2:输入: 28输出: “AB”示例 3:输入: 701输出: “ZY”链接:https://leetcode-cn.com/problems/excel-sheet-column-title2 思路这道题看起来挺简单,但实际做的

2020-08-05 20:55:23 38

原创 160. 相交链表(JS实现)

1 题目编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为

2020-08-05 20:45:28 31

原创 165. 比较版本号(JS实现)

1 题目比较两个版本号 version1 和 version2。如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。你可以假设版本字符串非空,并且只包含数字和 . 字符。. 字符不代表小数点,而是用于分隔数字序列。例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号

2020-08-05 20:44:53 32

原创 162. 寻找峰值(JS实现)

1 题目峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入: nums = [1,2,1,3,5,6,4]输出: 1 或 5解释: 你的函数可以返

2020-08-05 20:44:38 25

原创 155. 最小栈(JS实现)

1 题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,nu

2020-08-05 20:44:15 33

原创 153. 寻找旋转排序数组中的最小值(JS实现)

1 题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 02 思路这道题从题意可知数组虽然被旋转,但局部上是有序的,因此就可以利用二分查找寻找最小值3代码/** * @param {number[]} nums *

2020-08-05 20:44:01 25

原创 152. 乘积最大子数组(JS实现)

1 题目给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。2 思路这道题用动态规划的思路做,由于有负数的存在,两个负数相乘为正,则还必须在迭代的过程中同时维护乘积的最小值和最大值3代码/** * @param

2020-08-04 20:24:22 37

原创 150. 逆波兰表达式求值(JS实现)

1 题目根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, , / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, ""]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入: [“4”, “13”, “5”, “/”, “+”]输出: 6

2020-08-04 19:58:00 34

原创 147. 对链表进行插入排序(JS实现)

1 题目对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。示例 1:输入: 4->2->1->3输出: 1-&g

2020-08-04 19:57:51 34

原创 148. 排序链表(JS实现)

1 题目在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->52 思路快速排序的链表方式,注意获取中点时,链表被断开成等分的两半,返回的是各部分的首节点3代码/** * Definition for singly-linked li

2020-08-04 19:57:36 31

原创 146. LRU缓存机制(JS实现)

1 题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是否可

2020-08-04 19:57:25 33

原创 143. 重排链表(JS实现)

1 题目给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.2 思路这道题的主要思路首先遍历一次链表获取整

2020-08-04 19:57:14 25

原创 142. 环形链表 II(JS实现)

1 题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos =

2020-08-04 19:57:06 28

原创 141. 环形链表(JS实现)

1 题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1], pos = -

2020-08-04 19:56:51 22

原创 139. 单词拆分(JS实现)

1 题目给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, wordD

2020-08-04 19:56:41 33

原创 138. 复制带随机指针的链表(JS实现)

1 题目给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2

2020-08-04 19:56:24 30

原创 136. 只出现一次的数字(JS实现)

1 题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 42 思路这道题巧妙应用位运算,可以将空间复杂度降至O(1)1.任何数和 0 做异或运算,结果仍然是原来的数。2.任何数和其自身做异或运算,结果是 0。3.异或运算满足交换律和结合律3代码/** * @p

2020-08-02 15:40:37 60

原创 134. 加油站(JS实现)

1 题目在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入:gas = [1,2,3,4,5]cost = [3,4,5,1,2

2020-08-02 15:32:27 54

原创 133. 克隆图(JS实现)

1 题目给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node {public int val;public List neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示。邻接列表 是用于表示有限图的无序列表的集合。每个列

2020-08-02 15:17:33 61

原创 131. 分割回文串(JS实现)

1 题目给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]2 思路这道题的主要思路还是用构造一棵树+剪枝的方法,来获取所有满足需求的子串组合,其实还有优化的地方,比如判断回文串是可以使用动态规划缓存结果3代码/** * @param {string} s * @return {string[][]} */var partition = func

2020-08-02 15:06:34 47

原创 130. 被围绕的区域(JS实现)

1 题目给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水

2020-08-02 14:56:39 53

原创 129. 求根到叶子节点数字之和(JS实现)

1 题目给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3]1/ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1->3 代表数字 13.因此,数字总和 = 12 + 13 = 25.示例 2:

2020-08-02 14:51:07 40

原创 127. 单词接龙(JS实现)

1 题目给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:输入:beginWord = “hit”,endWo

2020-08-02 14:43:50 45

原创 125. 验证回文串(JS实现)

1 题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false2 思路这道题思路是通过双指针的方法来依次对比首尾各字母是否相等3代码/** * @param {string} s * @return {boolean} */var isPali

2020-08-02 14:33:18 52

原创 122. 买卖股票的最佳时机 II(JS实现)

1 题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票

2020-08-02 14:30:41 46

原创 121. 买卖股票的最佳时机(JS实现)

1 题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:

2020-08-02 14:25:54 50

原创 多级菜单和滚动条共存overflow问题

前天,在学习中遇到一个问题,要实现一个多级菜单,且每级菜单都有滚动条,这时我想使ul元素overflow-x为visible,而overflow-y为auto,但发现设置以后并没有按照想像中的生效,x和y方向都变为了auto,最后发现是CSS规范这样限制的“ overflow-x”和“ overflow-y”的计算值与它们的指定值相同,除了不可能与“ visible”进行某些组合:如果将一个指定为“ visible”而另一个指定为“ scroll”或“自动”,然后将“可见”设置为“自动”最后参考这篇

2020-07-02 19:33:22 867

原创 120. 三角形最小路径和(JS实现)

1 题目给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。2 思路这道题的主要思路用一个数组

2020-06-29 22:29:38 1060

原创 117. 填充每个节点的下一个右侧节点指针 II(JS实现)

1 题目给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。示例:输入:root = [1,2,3,4,5,null,7]

2020-06-29 22:20:58 1095

原创 116. 填充每个节点的下一个右侧节点指针(JS实现)

1 题目给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:输入:{“KaTeX parse error: Expected '}', got 'EOF'

2020-06-29 22:18:21 1104

原创 114. 二叉树展开为链表(JS实现)

1 题目给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树1/ 2 5/ \ 3 4 6将其展开为:1234562 思路这道题我的思路比较直接,首先前序遍历树,然后用next指针链接每个节点,随后修改原来right指针,题解的方法比较巧妙,对树进行变形的后序遍历,遍历顺序是右子树->左子树->根节点例如,我们依次遍历 6 5 4 3 2 1,然后每遍历一个节点就将当前节点的右指针更新为上一个节点,6 <- 5 <

2020-06-29 22:12:25 1117

原创 112. 路径总和(JS实现)

1 题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,5/ 4 8/ / 11 13 4/ \ 7 2 1返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。2 思路这道题的主要思路是使用递归的方法将从根节点到达每个叶子节点的路径和

2020-06-29 22:04:39 351

原创 110. 平衡二叉树(JS实现)

1 题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]1/ 2 2/ 3 3/ 4 4返回 false 。2 思路这道题主要思路从底向上遍历,每次节点深度加1,判断

2020-06-29 21:58:56 158

原创 109. 有序链表转换二叉搜索树(JS实现)

1 题目给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:0/ -3 9/ /-10 52 思路这道题我是将链表转换为数组,然后再用递归的方法来划分数组构造二叉树的,题解有更巧妙的中序遍历递归

2020-06-29 21:54:34 74

原创 108. 将有序数组转换为二叉搜索树(JS实现)

1 题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ -3 9/ /-10 52 思路这道题的主要思路是首先找到数组的中点,中点极为根节点,然后中点两侧的子数组就为左右子树,随后利用继续对左右两边进行划分,递归进行

2020-06-29 21:48:02 1669

提示
确定要删除当前文章?
取消 删除