自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 一道百度笔试题的思考

前几天参加了百度的笔试, 就 AC 了一道题(留下菜鸡的泪水). 第三题没怎么花时间, 但是第二题是花了时间没做出来, 今天在牛客上学习了一下大佬们的代码, 居然还是没太明白(怀疑人生了). 就又去请教了东哥.题目输入两行数 :第一行 : n (表示数组元素个数, 规模不大, 2 <= n <= 50 如果没记错的话) 第二行 : n 个数 (数值很大, 需要用 lon...

2020-04-05 15:07:26 251

原创 Leetcode 252. Meeting Room 253. Meeting Room II

会议室系列也是常见的问题. 感觉会议室应该是属于区间问题.252. 会议室本题的思路较为简单, 只需要一个排序即可. 感觉本题的难点即在创建一个新的排序器, Array.sort() 排序传入新的排序规则.class Solution { public boolean canAttendMeetings(int[][] intervals) { if (int...

2020-04-03 20:55:36 187

原创 斗地主拿到双王的概率问题

今天遇到一个概率相关的问题, 简单地说就是已知事件 A 在事件 B 发生情况下的概率, 就是 P( A | B), 还有事件 A 的概率 P(A), 以及事件 B 的概率 P(B). 然后求事件 B 在事件 A 发生情况下的概率. 这是一个概率中比较常见的问题, 但是忘记了这个定理. 求助东哥, 东哥说这个叫贝叶斯公式.贝叶斯公式简介通常事件 A 在事件 B (发生) 的条件下的概率, 与...

2020-03-28 20:19:47 3618

原创 Leetcode Trie (前缀树) 系列 (一) 前缀树的简介

之前在公众号上有刷到过前缀树的相关内容, 但是没有进一步学习, 今天 Leetcode 的每日一题涉及到了前缀树的相关知识, 那么就学习记录一下. 下面的知识点参考leetcode 官方题解前缀树的简介前缀树的最常见应用应该是在搜索引擎中, 我们打了几个的关键字, 搜索栏的下面就会出现相关的一系列的包含关键字的搜索条目.比如 : 我们在搜索引擎中打入 how to , 下面就会根据...

2020-03-28 08:39:09 181

原创 Leetcode 6. Z 字形变换

其实根据题目的意思, 换成 N 字形更为贴切. 按照给定的行数来, 比如行数为 4, 那么对应到给的图中, 每个字符所在的行号为0 1 2 3 2 1 0 ...0 1 2 3 2 1 0 就一直保持这个规律继续下去. 这个思路我是想出来, 但是并没有想好如何模拟出这个变化的过程. 然后看了一下大佬的题解, 学习一下 : 分析一下这个过程, 当到达 0 这个最小值, 后面就变成加 1, 当...

2020-03-27 16:05:38 103

原创 Leetcode 143. 重排链表

本题算是一个比较典型的链表操作的问题, 难度为中等, 其中有几个操作都是初级的链表相关试题.题目的意思较为简单, 可以分为三个步骤 :1. 首先需要找到队列的中间节点, 将这个链表等分为两个部分2. 逆序后半部分的链表3. 将后半部分的链表一个一个地插入到前半部分链表的节点中这三个步骤里, 第一个步骤对应的就是寻找链表的中间结点; 第二个步骤对应的就是反转链表所以一道 ...

2020-03-25 19:20:10 139

原创 Leetcode 513. 找树左下角的值

本题可以使用深搜或者广搜来解决. 对于一个思想或者方法, 一定要思考得深入一点, 如果下次知道这个解法, 但是没有写出来, 那么就说明是因为没有深入思考.BFS广搜和二叉树的结合, 一个典型的例子就是层次打印二叉树. 一般来说, 使用一个队列来完成遍历, 这里要求的是最左边的值. 因为先入队的先出队, 所以在加入队列的时候, 先加入其右节点, 再加入其左节点. 这样最后出队的肯定是最低层...

2020-03-24 20:13:28 74

原创 Leetcode 打家劫舍系列

动态规划是算法中常常考察的内容. 开始学习这一块的内容. 跟着 Leetcode 上的题目来学习.本文参考了大佬的文章, 上面有详细完整的解释, 可以去看看.198. 打家劫舍本题的思路较为简单, 用 dp[i] 表示子问题, 就是偷到第 i 家时, 小偷能偷到的最多的钱. 因为不能同时偷两间相同的房屋. 所以 dp[i] 的值有两个可能, 选择偷第 i 家的话, 那么一定...

2020-03-24 19:23:07 100

原创 [ Java 源码 ] HashMap

基础属性 : // 初始化桶的大小, 底层实现是数组, 所以这里是数组默认的大小 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 // 桶最大值 static final int MAXIMUM_CAPACITY = 1 << 30; // 默认的负载因子...

2020-03-02 22:00:14 68

原创 [Java 源码] LinkedList

还是和前面的 ArrayList 一样, 选出重要的源码进行分析 :基础属性 // 结点数量 transient int size = 0; // 第一个结点(头结点) transient Node<E> first; // 最后一个结点(尾结点) transient Node<E> last; // ...

2020-03-02 19:05:11 82

原创 [Java 源码] ArrayList

对于源码的学习, 我是这样的, 简单地过一遍, 看一下有那些方法, 重点看经常问到的源码问题.ArrayList 的基础属性 :private static final int DEFAULT_CAPACITY = 10; // 空实例数组 private static final Object[] EMPTY_ELEMENTDATA = {}; // 默认大...

2020-03-02 17:14:24 70

原创 [Java 源码] Collection 讲解

最近准备面试, 先来学习一下 Java 集合的相关源码. 首先对于一个知识点, 应该有一个框架的梳理. Java 集合具体来说应该分为 5 个部分 : List、Set、Map、迭代器 (Iterator、Enumeration)、工具类 ( Arrays、Collections); 而我们常说的 Java 集合, 根据其继承关系, 可以分为 2 个大类 : Collection 以及 Map :...

2020-03-02 16:30:12 84

原创 Leetcode 之二分法总结

二分法是查找问题中的常用方法, 也是一个写得差不多很容易, 写得正确不那么容易的问题. 下面针对在刷二分法中的一些问题进行小结, 本文章参考了如下的资料 :用“排除法”写二分问题, 以及二分查找算法细节详解. 感谢这两位同学的分享, 受益良多.首先二分法通常使用的前提是 目标数组是有序的.二分法基本模版在学习数据结构的查找算法时, 一定会给出如下的二分法基本模版 :c...

2020-02-24 16:30:43 622

原创 二叉树的遍历

二叉树的遍历, 分为层次遍历, 前序遍历, 中序遍历, 后序遍历. 是二叉树中的基本操作, 前序、中序、后序遍历一般也分为递归实现与非递归实现. 本文来将这三种遍历都实现一遍.下面这些代码都是在 leetcode 上通过的代码三种遍历的递归实现基本上就是按照遍历时, 左子树、父结点、右子树的遍历顺序来处理这三句代码的位置关系.前序遍历class Solution { ...

2020-01-09 19:52:15 55

原创 Leetcode 589. N-ary Tree Preorder Traversal

本题也是树的遍历, 只不过把二叉树换成了 N 叉树, 其实背后的思想还是一样的. 也用递归和非递归来实现一下 :我的思路递归思路class Solution { private List<Integer> result = new LinkedList<>(); public List<Integer> preorder(Node...

2020-01-08 12:57:53 113

原创 Leetcode 235. Lowest Common Ancestor of a Binary Search Tree

题目大意 : 给定一个排序二叉树, 以及二叉树中的两个结点, 寻找两个结点的祖先结点中, 层数最深的结点.我的思路首先第一步是寻找两个给定结点的相同的祖先结点, 然后再选择层次最深的. 可以用一个函数, 判断给定的两个结点是否相连, 然后就利用二叉树基本的层次遍历, 这样遍历到的最后一个祖先结点就肯定是层次最深的了. 代码如下 :class Solution { public...

2020-01-07 15:09:22 67

原创 Leetcode 124. Binary Tree Maximum Path Sum

本题的思路其实和Longest Univalue Path这题的内容是一致的, 如果最长相同数值路径的逻辑能明白, 这里就是把数值相等的判断, 换成了数值加和的判断递归思路二叉树的路径问题常用递归来解决, 这里递归函数求的是以当前结点为起始的链路的最大值, 这里可能存在三种情况 :以当前结点为起始的左子树链路为最大值 以当前结点为起始的右子树链路为最大值 不包含左右子树, 当...

2020-01-05 10:44:50 62

原创 Leetcode 111. Minimum Depth of Binary Tree

本题是找到二叉树的最小深度, 即找到从一个叶子结点到根结点的最小路径.思路一 : 递归思路class Solution { public int minDepth(TreeNode root) { if (root == null) return 0; int left = minDepth(root.left); ...

2020-01-04 14:30:33 60

原创 数据库复习总结

这次学习的课程是面向面试的, 所以很多知识都是根据面试中出现的高频问题来学习的.如何构建一个数据库这个是一个很空泛很大的问题, 但是我们可以将数据库的构建和一个软件的构建进行类比 :首先需要硬件存储模块, 比如 : 机械硬盘, 固态硬盘等来存储数据; 数据库程序实例 : 数据仅仅存储起来是没有任何意义的, 需要对数据库中的数据进行操作, 比如增删改查, 这个就需要数据库程序实例来...

2020-01-04 11:06:13 98

原创 Leetcode 系列之 Path Sum

现在来尝试将一系列的题目解决一下.Path Sum本题是 easy 难度的题目, 给定一个二叉树和一个和 sum, 判断是否有一条从根结点到叶子结点的路径, 使得路径上的结点的值之和与 sum 相等.使用递归的思路 :class Solution { public boolean hasPathSum(TreeNode root, int sum) { ...

2020-01-02 15:30:00 117

原创 Leetcode 101.Symmetric Tree

树的很多题目都是对根结点(或者当前结点) 进行处理之后, 再对子结点进行处理. 本题也是如此, 对根结点判断后, 再对其根节点的子结点进行判断处理. 同样也是有递归和非递归两种方式来解决.递归的方法 :class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) ...

2020-01-02 15:22:52 99

原创 Leetcode 387. First Unique Character in a String

我的思路用一个 HashMap 来记录该字符串中不同字符出现的个数, 然后遍历字符串, 查找当前字符的出现次数, 如果为 1, 直接返回该字符下标.class Solution { public int firstUniqChar(String s) { HashMap<Character, Integer> map = new HashMap<...

2019-12-16 14:24:31 72

原创 Leetcode 347. Sort Colors

本题就是荷兰国旗问题, 思路较为简单, 和快排的思路较为类似, 在数组的左边区间放 0, 初始区间的位置为 -1; 数组的右边区间放 2, 初始区间的位置为 nums.length; 然后遍历该数组, 如果该数为 0, 那么就和左边区间的下一个元素位置交换, 如果为 2, 那么就和右边区间的上一个元素位置交换. 但是要注意的是, 左边的元素已经遍历过了, 所以交换了之后也可以直接跳过该位置; 但是...

2019-12-16 13:28:03 59

原创 Leetcode 215.Kth Largest Element in an Array

通常遇到第 K 个大的元素这样的问题, 考虑排序类的问题.本题的题目就是问在这个数组中第 K 大的元素方法一最简单直接的做法当然是将该数组排序.这种方法的时间复杂度为 O(NlogN), 空间复杂度为 O(1)class Solution { public int findKthLargest(int[] nums, int k) { Arrays.s...

2019-12-16 12:43:17 83

原创 Leetcode 155. Min Stack

easy 难度的题目, 运用一个辅助栈来存储当前最小的元素, 思路简单 :class MinStack { private Stack<Integer> dataStack; private Stack<Integer> minStack; int minValue; /** initialize your data structure...

2019-12-01 16:47:26 64

原创 Leetcode150. Evalution Reverse Polish Notation

逆波兰表达式就是把操作数放前面, 把操作符后置的一种写法, 第一个出现的运算符, 前面必定会由数字, 然后将这两个数字进行运算后, 将新的数字插到原位置, 继续操作, 最后可以得到答案.用栈的思路比较简单 :class Solution { public int evalRPN(String[] tokens) { Stack<Integer> st...

2019-11-28 10:27:27 68

原创 Leetcode 739. Daily Temperature

我的思路尽管本题是在栈的目录下, 但是并没有想到什么栈的思路, 所以就先使用最直接的暴力法来解决 : 两个 for 循环, 找到比当前数值大的就立即跳出里层的循环 :class Solution { public int[] dailyTemperatures(int[] T) { int length = T.length; int[] ans ...

2019-11-27 21:21:50 44

原创 Leetcode 20.Valid Parenthese

我的思路很简单, 遇到 ()、[]、{} 这三对符号的左边的就入栈, 遇到右边的就直接将栈顶元素与其对应进行比较, 能组成一对符号就出栈, 否则就返回 false. 因为有 6 种情况就使用 switch 语句 :import java.util.Stack;class Solution { public boolean isValid(String s) { ...

2019-11-27 15:19:55 70

原创 链表阶段总结

最近刷的题都是链表的问题, 链表是数据结构中具有代表性的内容, 总结一下最近有关链表的收获 :首先链表是一个有规律的数据结构, 对一个链表进行操作, 对于其中每个结点的操作可能都是一样的, 所以链表的问题很大一部分可以用递归的思路来解决. 链表的常见操作是一定要记住的, 头插法将链表倒序; 对于容易出现的空指针异常, null 是可以赋值给一个 ListNode, 但是不可以将 null ...

2019-11-25 16:17:27 74

原创 Leetcode 725. Split Linked List in Parts

本题自己想的时候, 连每条链表的结点个数都不明白, 这个其实就是这题的思路并没有那么难 : 首先通过给定的 K 可以确定链表的数量, 然后通过除法和取余操作可以确定每条链表的长度, 因为有余数肯定是每条链表平分的话分不到一个结点, 所以从第一个结点开始, 每个结点分一个即可, 分完余数就没有了.class Solution { public ListNode[] splitListT...

2019-11-24 09:20:43 74

原创 Leetcode 234. Palindrome Linked List

我的思路 :回文链表的判断, 我的第一思路就是将其反转后再和原链表进行比较, 然后自然就想到了利用栈来实现, 但是我的这个思路满足了 O(n) 的时间复杂度但是没有满足 O(1) 的空间复杂度, 我就先实现了一下 :import java.util.Stack;class Solution { public boolean isPalindrome(ListNode he...

2019-11-23 11:58:54 45

原创 Leetcode 445. Add Two Numbers II

本题就是实现两个链表表示的数的加法, 之前考虑的是将链表表示的值都取出来, 然后想加之后再用链表表示出来, 但是感觉这并不是这题考察的本意. 比较麻烦的地方是从链表尾的数字开始相加而不是从链表头.(同时这也是重要特征)并没有想到啥思路, 就准备看一下大神的思路, 看到了代码中的栈, 联想到之前的麻烦之处, 栈不就是先进后出, 完美满足了要求.我的思路其实也很直接, 将两个链表放到栈中...

2019-11-20 13:11:33 101

原创 Leetcode 206. Reverse Linked List

尽管是 easy 难度, 但是对于头插法的过程并没有很熟悉, 所以只能学习一下大神们的思路 :头插法 :建立带头结点的链表:class Solution { public ListNode reverseList(ListNode head) { ListNode newHead = new ListNode(-1); while(head ...

2019-11-19 20:55:08 140 1

原创 Leetcode 19. Remove Nth Node From End of List

我的思路和查找链表中倒数第 n 个结点的思路相似, 我们可以让一个指针 first 指向第 n-1 个 元素, 然后用一个指针 prev 指向链表头, 这样同时遍历, 当 first 指向最后一个结点的时候, prev 指向了倒数第 n 个结点 target 的上一个结点, 那么这个时候就对 target 进行判断, 如果 target 的后续结点不为空, 那么直接将 prev 的后续结点赋...

2019-11-18 23:44:38 59

原创 Leetcode 83 Remove Duplicates from Sorted List

我的解法 :easy 难度的题目, 上来思路也比较简单, 开一个新的哨兵结点, 然后依次遍历给定链表, 如果链表当前结点的值与新链表的当前结点的值不同, 就将其加入到新链表中, 否则就直接跳过. 下面是代码 :class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode l ...

2019-11-18 13:13:49 76

原创 Leetcode 21.Merge Two Sorted Lists

本题思路很简单, 依次比较链表指针目前指向的结点的值, 将较小的值放到新链表中, 同时将链表指针更新, 直到其中一个链表为空, 那么接下来的就直接是另一个非空链表了./** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ...

2019-11-17 21:59:36 59

原创 Leetcode 565. Array Nesting

题意 :用 nums[i] 的值作为下标, 下一个值为第 nums[i] 的值. 这样不断嵌套, 直到遍历到遍历过的值, 所以也是求数组中存在的环的最大值.这里需要注意的是, 只要是存在一个环, 无论从哪里进入都是一样的, 所以按顺序遍历, 每个环都找一遍即可; 对于访问过的元素, 直接跳过即可, 因为不会出现两个环部分重合的情况. 这两点是需要想明白的.class Solution...

2019-10-25 11:43:16 62

原创 Leetcode 769. Max Chunks To Make Sorted

题目意思 :给一个长度为 n 的数组, 其元素的值也是从 0 ~ n - 1 的一个排列, 我们将这个数组分为若干部分, 将这些部分独自地排序, 然后将这些部分连接起来, 这个结果和将原数组直接排序的结果相同.没找到这背后的规律, 查看了一下其他大神的思路 : 这个算法就是找到一些分割线, 在这条线的左边的数字都小于这条线右边的数字.这个数组排序好的结果就是每个元素和下标的值相等. 所以...

2019-10-25 11:33:34 75

原创 普林斯顿算法课 Quick-Union Improvement

Weighted quick-union记录每个树的大小, 在连接的时候将小的树的根连接到大的树的根 上, 这样可以避免树的深度过大.public class WeightedQuickUnionUF { private int[] id; private int[] size; public WeightedQuickUnionUF(int N) { ...

2019-10-24 16:03:16 140

原创 普林斯顿算法课 dynamic connectivity problem

好好地做笔记, 将算法和数据结构这部分啃下来.Dynamic connectivity给定 N 个点, 通过连接命令将其中的几对点连接起来, 然后查询给出的两个点之间是否有连通的路径.union(a, b) : 将 a 和 b 连接起来connected(a, b) : a 和 b 之间是否有连通的路径Modeling the connections假设“连通” 是具有一...

2019-10-24 13:58:55 349

空空如也

空空如也

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

TA关注的人

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