自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 剑指offer(树的子结构)

树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。题目分析思路(一)/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} */function HasSubtree(pRoot1, pRoot2){ // write code here if(!pRoot1||!pRoot2)return

2020-09-10 14:47:08 199

原创 剑指offer(链表中倒数第k个结点)

链表中倒数第K个结点题目描述输入一个链表,输出该链表中倒数第k个结点。题目分析双指针,其中一个指针p先走k步,之后再同时走,直到p走到末尾时,q再向后走一步,即为结果思路(一)/*function ListNode(x){ this.val = x; this.next = null;}*/function FindKthToTail(head, k){ // write code here let p=head; let q=head; i

2020-09-09 14:25:30 184

原创 剑指offer(调整数组顺序使奇数位于偶数前面)

调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题目分析思路(一)function reOrderArray(array){ // write code here let stack1=[]; for(let i=0;i<array.length;i++){ if(array[i]%2!==0)

2020-09-08 15:42:37 169

原创 剑指offer(从尾到头打印链表)

从尾到头打印链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。题目分析unshift()将元素插在当前数组元素的最前面思路(一)/*function ListNode(x){ this.val = x; this.next = null;}*/function printListFromTailToHead(head){ // write code here let arrayList=[]; let node=head;

2020-09-08 09:22:56 144

原创 LeetCode(top100)回文子串

回文子串题目描述给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。题目分析输入:“abc”输出:3解释:三个回文子串: “a”, “b”, “c”输入:“aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”思路(一)/** * @param {string} s * @return {number} */var countSubstrin

2020-08-27 14:19:20 83

原创 LeetCode(top100)最大正方形

最大正方形题目描述在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。题目分析输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4。思路(一)/** * @param {character[][]} matrix * @return {number} */var maximalSquare = function(matrix) { //dp[i][j]以第i行第j列为正方形右下角所能构建最大正方形的边长

2020-08-26 19:50:33 125

原创 LeetCode(top100)最小路径和

最小路径和题目描述给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。题目分析输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。思路(一)/** * @param {number[][]} grid * @return {number} */var minPathSum = function(grid) {let m=

2020-08-26 19:19:57 128

原创 LeetCode(top100)不同路径

不同路径题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?题目分析输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向右 -> 向右输入: m = 7, n =

2020-08-26 18:06:03 126

原创 LeetCode(top100)最长上升子序列

最长上升子序列题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。题目分析输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。思路(一)** * @param {number[]} nums * @return {number} */var lengthOfLIS = function(nums) { //dp[i] 表示以 nums[i] 结尾的最长上升子序列长度 if(!nums

2020-08-23 20:15:40 116

原创 LeetCode(top100)打家劫舍

打家劫舍题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。题目分析输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。输入:[2,7,9

2020-08-23 19:34:27 75

原创 LeetCode(top100)零钱兑换

零钱兑换题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。题目分析输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1输入: coins = [2], amount = 3输出: -1思路(一)/** * @param {number[]} coins * @param {number} amount

2020-08-23 17:35:41 120

原创 LeetCode(top100)搜索二维矩阵||

搜索二维矩阵||题目描述编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。题目分析[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]思路(一)考虑输入[] target为0时,返回false;牛客上的题没有

2020-08-23 07:16:02 136

原创 LeetCode(top100)在排序数组中查找元素的第一个和最后一个位置

在排序数组中查找元素的第一个和最后一个位置题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。题目分析输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]思路(一)/** * @par

2020-08-21 20:04:22 202

原创 LeetCode(top100)跳跃游戏

跳跃游戏题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。题目分析输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。思路(一)/*

2020-08-21 19:22:32 106

原创 LeetCode(top100)根据身高重建队列

根据身高重建队列题目描述假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。题目分析输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]思路(一)//首先按照身高h降序排列,同时如果身高相同那么按照k增序//逐个将他们放入数组中,新放入的数组所在

2020-08-21 13:59:28 386

原创 LeetCode(top100)买卖股票的最佳时机

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

2020-08-21 12:15:31 67

原创 LeetCode(top100)删除链表的倒数第N个节点

删除链表的倒数第N个节点题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。题目分析给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.思路(一) * this.next = null; * } *//** * @param {ListNode} head * @param {number} n * @return {ListNode} */

2020-08-21 09:53:14 57

原创 LeetCode(top100)盛最多水的容器

盛最多水的容器题目描述给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。题目分析输入:[1,8,6,2,5,4,8,3,7]输出:49思路(一)/** * @param {number[]} height * @return {number} */

2020-08-20 14:36:44 96

原创 LeetCode(top100)无重复字符的最长子串

最短无序连续子数组题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。题目分析输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。思路(一)

2020-08-20 14:00:49 187

原创 LeetCode(top100)三数之和

三数之和题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。题目分析给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]思路(一)/** * @param {number[]} nums * @return {number[][]} *

2020-08-19 13:21:00 219

原创 LeetCode(top100)排序链表

排序链表题目描述在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。题目分析输入: 4->2->1->3输出: 1->2->3->4输入: -1->5->3->4->0输出: -1->0->3->4->5思路(一)//每一轮取最小值放在当前指针slow的位置上/** * Definition for singly-linked list. * function ListNode(

2020-08-19 12:17:54 121

原创 LeetCode(top100)颜色分类

颜色分类题目描述给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题题目分析输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]思路(一)两路替换/** * @param {number[]} nums * @return {void} Do not return anything

2020-08-18 19:54:02 114

原创 LeetCode(top100)合并区间

合并区间题目描述给出一个区间的集合,请合并所有重叠的区间。题目分析示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。思路(一)/** * @param {number[][]} intervals * @

2020-08-14 12:26:01 80

原创 LeetCode(top100)前k个高频元素

前k个高频元素题目描述给定一个非空的整数数组,返回其中出现频率前 k 高的元素。题目分析输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。思路

2020-08-14 10:33:54 150

原创 LeetCode(top100)字符解码

字符解码题目描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。题目分析输入:s = “3[a]2[bc]”输出:“aaabcbc”输入:s

2020-08-12 16:47:25 95

原创 LeetCode(top100)每日温度

每日温度题目描述请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。题目分析气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。思路(一)暴力法,每个

2020-08-12 16:16:45 164

原创 剑指offer(按之字形顺序打印二叉树)

按之字形顺序打印二叉树题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。题目分析与之前的按行层序打印思想相同(采用队列shift()节点,以及下一层级队列的节点添加方式),(区别在于将shift出的节点如何添加到res数组中)首先将根节点放到当前queue中,因为对奇数偶数不同行要采用不同的添加方法,因此采用for循环对每一个队列中的节点进行遍历,对当前queue中的节点进行shift,并把当前节点

2020-07-31 11:53:06 117

原创 LeetCode(top100)路径总和|||

路径总和|||题目描述给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。题目分析root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3/ \ \3 2 11/ \ 3

2020-07-30 16:36:49 158

原创 LeetCode(top100)二叉树的最近公共祖先

二叉树的最近公共祖先题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”题目分析例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3

2020-07-30 14:44:22 55

原创 LeetCode(top100)二叉树展开为链表

二叉树展开为链表题目描述给定一个二叉树,原地将它展开为一个单链表。题目分析例如,给定二叉树1/ \2 5/ \ 3 4 6将其展开为:1\23\ 4 \ 5 \ 6思路(一)/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 :

2020-07-29 16:39:54 65

原创 LeetCode(top100)二叉树的直径

二叉树的直径题目描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点题目分析示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。两结点之间的路径长度是以它们之间边的数目表示。思路(一)(1)写出一个求树高度的函数height,每次把节点当作参数传入,求出此节点向下的

2020-07-29 15:40:00 90

原创 LeetCode(top100)把二叉树转换为累加树

把二叉树转换为累加树题目描述给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。题目分析输入: 原始二叉搜索树:5/ 2 13输出: 转换为累加树:18/ 20 13思路(一)反中序的方法,迭加修改值/** * Definition for a binary tree node. * function TreeNode(val) { *

2020-07-29 11:56:39 220

原创 LeetCode(top100)从前序与中序遍历序列构造二叉树

从前序与中序遍历序列构造二叉树题目描述根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]题目分析(1)构建二叉树包含:root,左子树,右子树(2)中序遍历inorder:[左|根|右](3)前序遍历preorder第一项为根节点:[根|左|右](4)const root=new TreeNode(preorder[0]); //每

2020-07-29 11:06:53 103

原创 LeetCode(top100)二叉树的层序遍历(从上往下打印+升级分行放到一个数组中)

二叉树的层序遍历题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。题目分析用队列来进行层序遍历,由于需要区分每一层,因此额外使用一个数组来存储下一层的节点二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]思路(一)/** * Definition for a binary tree node. * function Tre

2020-07-29 07:10:48 321

原创 LeetCode(top100)二叉树的中序遍历

二叉树的中序遍历题目描述给定一个二叉树,返回它的中序 遍历题目分析输入: [1,null,2,3]12/3输出: [1,3,2]思路(一)递归法/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root

2020-07-29 06:19:02 76

原创 LeetCode(top100)寻找两个正序数组的中位数

寻找两个正序数组的中位数–归并排序题目描述给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。题目分析归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法思路(一)暴力法/** * @param {number[]} nums1 * @param {number[]} nums2 * @

2020-07-28 19:31:25 99

原创 剑指offer(栈的压入、弹出序列)

栈的压入、弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)题目分析借助辅助栈,例如pushV为1,3,5,7popV为7,5,3,1首先将1压入辅助栈stack中,此时stack栈顶为1,判断与popV[0]=7不相等,继续将

2020-06-22 12:13:01 115

原创 剑指offer(连续子数组的最大和)

连续子数组的最大和题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)题目分析思路(一)function

2020-06-22 10:09:28 51

原创 剑指offer(表示数值的字符串)

表示数值的字符串题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。题目分析思路(一)//s字符串function isNumeric(s){ //[+-]?

2020-06-21 10:31:09 64

原创 LeetCode(top100)正则表达式匹配

正则表达式匹配题目描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。题目分析‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。...

2020-06-21 08:35:32 223

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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