自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [LeetCode每日一练]面试题56 - I. 数组中数字出现的次数(位运算)

面试题56 - I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。解题思路: 此题如果是第一次做,可能解题会比较困难,此题涉及的知识点是位运算的应用,《剑指offer》书上的原题。解题的基本思路是,首先对所有的数做异或得到最终的异或值,然后,利用异或值的某一位为1将原数...

2020-04-28 07:44:19 255

原创 [LeetCode]LeetCode每天一题 - 23. 合并K个排序链表

23. 合并K个排序链表合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6解题思路: K个排序链表的合并,最容易想到的方法是用K个指针分别指向K个链表,然后每次从这K...

2020-04-26 08:39:30 98

原创 [LeetCode]210. 课程表 II(图的遍历,拓扑排序,是否成环)

210. 课程表 II现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。解题思路: 本题与之前的Le...

2020-04-25 18:38:49 570

原创 [LeetCode]31. 下一个排列(找规律题)

31. 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1解题思路: 此题属于找规律题,我们可以...

2020-04-25 11:31:22 912

原创 [LeetCode]LeetCode每日一题 - 46. 全排列(回溯剪枝)

46. 全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路: 本题全排列题依然可以用回溯算法解题,关于回溯算法的总结和使用方法我写在了一个题解的博客中,详细内容可以参考这篇博客,秉承着回溯算法的思...

2020-04-25 09:26:13 212

原创 复习笔记-网络

计算机网络文章目录计算机网络1. 保证节点传输存储的可靠性2. TCP怎么保证可靠性,简述TCP建立连接和断开连接的过程3. TCP模型,状态转移4. HTTP和HTTPS区别,HTTPS缺点6. HTTP返回码7. IP地址作用,MAC地址作用9. OSI七层协议,TCP/IP四层模型10. 三次握手四次挥手【补充】11. 搜索baidu,会用到计算机网络中什么层,每层干什么12. TCP拥塞...

2020-04-24 15:18:53 289

原创 LeetCode - 207. 课程表(回溯剪枝)

207. 课程表你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?解题思路: 本题的背景是拓扑排序,本质上可以转化为求图是否存在环的问题。图论中有几个经典的问题...

2020-04-24 11:31:19 250

原创 面试题61. 扑克牌中的顺子

面试题61. 扑克牌中的顺子从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。解题思路: 首先0是大小王,可以看成任意数,相当于可以拿来弥补空缺,因此可以先单独统计出来,不参与非0数字的比较,然后剩下的牌若想成为顺子,或者说补几张牌可以成为顺子,那么要chec...

2020-04-23 11:59:28 178

原创 LeetCode - 133. 克隆图

133. 克隆图给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。解题思路: 解决问题我们首先要想清楚一点,即我们解决问题的目标是什么,也就是说解决问题的终点,解决到什么程度就认为问题解决完了。解此题也是一样的,怎么样就可以认为克隆图完毕呢,将克隆的节点new完,并且将这个节点的neig...

2020-04-23 11:19:41 197

原创 牛客网-二叉搜索树与双向链表

牛客网-二叉搜索树与双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路: 此题是《剑指offer》书上的题,基本的思路是,我们附设一个last指针,指向将树转换成双向链表后的最后一个节点。递归地将左子树变成链表,然后通过修改last和root的左右指针,将root收录到左子树的链表中,然后last指向ro...

2020-04-23 10:19:09 162

原创 LeetCode - 1247. 交换字符使得字符串相同

1247. 交换字符使得字符串相同有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 “x” 和 “y”,你需要通过「交换字符」的方式使这两个字符串相同。每次「交换字符」的时候,你都可以在两个字符串中各选一个字符进行交换。交换只能发生在两个不同的字符串之间,绝对不能发生在同一个字符串内部。也就是说,我们可以交换 s1[i] 和 s2[j],但不能交换 s1[i] 和 s1[j]...

2020-04-23 09:31:49 4161

原创 探讨哈希算法及其应用场景

哈希算法本篇博文主要介绍哈希算法的定义,常见的哈希算法,哈希冲突的解决方法…相比入其他数据结构,散列表的优势在于查找和插入的速度非常快,在不发生冲突的情况下,查找和插入的时间复杂度为O(1),是一种时间换空间的做法,而B树查找和插入的时间复杂度为O(logn),针对写优化的LSM树,插入的时间复杂度为O(1),采取日志的方式进行追加,但是查找的效率非常低,比如leveldb的设计中内存组件数据...

2020-04-22 20:05:49 650

原创 LeetCode - 279. 完全平方数

279. 完全平方数给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。解题思路: 此题解法非常多,参照网上的解法,目前至少有三种解法,即图的广度优先遍历(转化成求无权图的最短路问题),动态规划,数学解法(四平和定理)。前两种解法非常常见也容易想到,数学解法一般情况下可能需要一定的经验,比如之前做过类似的题,解...

2020-04-22 11:00:23 135

原创 LeetCode - 199. 二叉树的右视图

199. 二叉树的右视图给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---解题思...

2020-04-22 09:31:38 129

原创 探讨图的最短路径和最小生成树问题

本篇博客将重点阐述图的最短路径算法和图的最小生成树算法…图的最短路径算法分为单源最短路和多源最短路,以及混搭的有无权图和有权图,具体的解决方法有Dijkstra算法,和Floyd算法;写在前面慕课课程浙江大学计算机《数据结构》最短路径问题1.无权图的单源最短路径单源最短路径本质上可以转化为BFS求层数.2.有权图的单源最短路径算法Dijkstra算法的本质是,S集合为包含源点...

2020-04-22 08:43:20 530

原创 洗牌算法(Fisher-Yates Shuffle,蓄水池抽样算法)

写在前面博客参考:https://blog.csdn.net/qq_26399665/article/details/79831490洗牌问题背景从n个不同数中随机不重复不回放的取出m个数,n>=m。洗牌算法的本质是:将原始的数组各个元素打散,是原数组各个数在打散数组中等概率出现。洗牌算法Fisher-Yates Shuffle算法基本思路:从原始数组中随机取出一个之前没有取过...

2020-04-21 21:36:34 587

原创 LeetCode - 46. 全排列(回溯)

46. 全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路: 这题是《剑指offer》书上的题,采取的是不停的交换数据的方法,有点像洗牌,具体的是,每次将start位置class Solutio...

2020-04-21 21:16:50 165

原创 LeetCode - 435. 无重叠区间

435. 无重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。解题思路: 解区间题,必不可少的要对区间进行排序,然后用贪婪算法解题,后面区间如果start边界小于前面区间的end边界,则两区间交叠,发生区间交叠时,我们需要去除其中一个区间,去除...

2020-04-21 19:41:41 139

原创 LeetCode - 725. 分隔链表

725. 分隔链表给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = ...

2020-04-21 18:40:06 214

原创 LeetCode - 547. 朋友圈

547. 朋友圈班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋...

2020-04-21 11:53:43 373

原创 LeetCode - 200. 岛屿数量

200. 岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。解题思路: 此题考查图的遍历,图的遍历自然有两种写法,这里写出DFS代码。class Solution {public: void helper(vec...

2020-04-20 21:56:41 246

原创 LeetCode - 392. 判断子序列

392. 判断子序列给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。...

2020-04-20 10:41:13 303

原创 常用的科研论文工具Sci-hub

科研论文工具Sci-hub最新变种网址写在前面这篇文章摘录于zhihu专栏,本着服务科研工作者的目的,特此撰写博文,若有侵权,联系则删.https://zhuanlan.zhihu.com/p/111980365Sci-hub最新变种网址之前,世界著名文献全文下载网站Sci-hub的网址通常情况是稳定的,但最近不稳定,中国某些地区发生了一定的波动。所以,提供以下几个新的变种网址:1....

2020-04-20 08:47:33 837

原创 LeetCode - 623. 在二叉树中增加一行(层序遍历)

623. 在二叉树中增加一行给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。如果 d 的值为 1,深度 d - 1 不存在,则创...

2020-04-19 22:21:31 208

原创 450. 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。示例:root = [5,3,6,2,4,nu...

2020-04-19 21:42:48 100

原创 515. 在每个树行中找最大值(层序遍历的应用)

515. 在每个树行中找最大值您需要在二叉树的每一行中找到最大的值。示例:输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9]解题思路: 这题属于层序遍历的应用,直接模板解题即可。/** * Definition for a binary tree n...

2020-04-19 19:19:41 181

原创 LeetCode - 235. 二叉搜索树的最近公共祖先

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

2020-04-19 18:24:45 155

原创 257. 二叉树的所有路径

257. 二叉树的所有路径给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。解题思路: 树的经典题,以此题展开的变体题有求树的某条路径之和,或者求所有路径之和,etc./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo...

2020-04-19 18:09:40 102

原创 LeetCode中N叉树的前序中序后序递归和非递归写法和层序遍历写法

LeetCode中N叉树的前序中序后序递归和非递归写法相关题:589. N叉树的前序遍历429. N叉树的层序遍历N叉树的后序遍历589. N叉树的前序遍历给定一个 N 叉树,返回其节点值的前序遍历。递归写法/*// Definition for a Node.class Node {public: int val; vector<Node*&gt...

2020-04-19 17:46:08 501

原创 LeetCode - 445. 两数相加 II

445. 两数相加 II给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -&g...

2020-04-19 10:42:01 124

原创 LeetCode - 455. 分发饼干(贪婪算法)

455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假...

2020-04-19 10:37:39 1146

原创 LeetCode - 376. 摆动序列(动态规划)

376. 摆动序列如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列...

2020-04-19 10:04:15 443

原创 LeetCode - 300. 最长上升子序列

300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。解题思路: 用动态规划解题,dp[i]表示以nums[i]为结尾的最长升序子序列的长度,那么我们扫描一遍[0,i)范围内所有子序列,当num[j]<nums[i]表示dp[i]可以以dp[j]为基础再增长一个长度,即dp[i]=MAX(dp[j]+1),每次刷新取最大值。// dp,Time:O(n^2),...

2020-04-18 18:54:09 110

原创 LeetCode - 494. 目标和

494. 目标和给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:解题思路: 深度优先搜索,维护一个路径的和值,然后当路径遍历完毕后,比较和值是否等于目标值,如果相同,则得到一个符合目标值的路径。...

2020-04-17 08:11:36 173

原创 LeetCode - 56. 合并区间

56. 合并区间给出一个区间的集合,请合并所有重叠的区间。解题思路: 我们将intervals数组按照左边界升序,右边界升序(在左边界相同的情况下)进行排序,然后将第一个区间存入结果数组,然后每次判断结果数组的最后一个区间(区间A)是否与当前遍历的intervals数组区间(区间B)交叠,若交叠,则将这个区间B与区间A合并,若不交叠,则直接将区间B添加到结果数组中。class Soluti...

2020-04-16 09:44:54 79

原创 LeetCode - 495. 提莫攻击

495. 提莫攻击在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。解题思路: 维护区间计算的起始点和终止点,当遍历的区间起始点不落在维护区间里,则可以计算这个维护区间的长度...

2020-04-16 09:44:34 301

原创 LeetCode - 139. 单词拆分

139. 单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。解题思路: 此题考查DP,Dynamic Programming,dp[len]表示s的前len个字符是否能拆分成字典中出现的多个单词,dp[len] = dp[l...

2020-04-15 18:21:49 153

原创 算法中背包问题笔记

算法中背包问题笔记参考资料背包问题九讲01背包问题题目:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。特征:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][...

2020-04-15 17:51:30 507

原创 LeetCode - 474. 一和零

474. 一和零在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。注意:给定 0 和 1 的数量都不会超过 100。给定字符串数组的长度不会超过 600。...

2020-04-14 20:45:25 213

原创 LeetCode - 845. 数组中的最长山脉

845. 数组中的最长山脉我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i < B.length - 1 使得 B[0] < B[1] < … B[i-1] < B[i] > B[i+1] > … > B[B.length - 1](注意:B 可以是 A 的任意子数组,包...

2020-04-14 14:45:53 180

空空如也

空空如也

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

TA关注的人

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