- 博客(51)
- 收藏
- 关注
原创 Leetcode【回溯】| 51. N皇后 & 52. N皇后 II
题目Leetcode 51. N皇后n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例: 输入:4 输出:[ [".Q…", // 解法 1 “…Q”, “Q…”, “…Q.”], ["…Q.", //
2020-10-19 21:29:18
265
原创 遍历HashMap和HashSet的方法
遍历HashMap的五种方法public static void main(String[] args){ //构建一个map Map<String, String> map = new HashMap<>(); map.put("1","a"); map.put("2","b"); //第一种方法:普遍使用,通过Map.keySet()遍历key,然后获取相应value for(String key:map.keySet()){ System.out.printl
2020-10-14 14:04:53
426
原创 Leetcode【TopK】| 347. 前 K 个高频元素
Leetcode | 347. 前 K 个高频元素题目解题哈希存储TopK问题解法快排变形堆二叉搜索树计数排序题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]示例 2: 输入: nums = [1], k = 1 输出: [1]提示: 1. 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 2. 你的算法的时间复杂度必须优于 O(n log n)
2020-10-05 17:11:46
296
1
原创 Leetcode【递归 贪心】 | 968. 监控二叉树
题目给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1: 输入:[0,0,null,0,0] 输出:1 解释:如图所示,一台摄像头足以监控所有节点。示例 2: 输入:[0,0,null,0,null,0,null,null,0] 输出:2 解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。解题具体见注释 三种状态的递推/** * Defini
2020-09-22 19:44:29
205
原创 计算机网络 | DNS解析全过程
浏览器输入一个网址之后,从输入网址到显示出页面,之间经历了什么过程?DNS解析出IP地址TCP连接发送Http请求服务器接收到请求并返回Http报文浏览器解析并渲染页面DNS解析过程浏览器先检查自身缓存中是否有被解析过的该域名对应的IP地址,如果有,缓存结束。同时域名被缓存的时间可通过TTL属性设置。(Time to live,域名解析在DNS服务器中存留时间)如果浏览器自身缓存没有,即还没有命中,浏览器会检查操作系统缓存中是否有对应的已解析的结果。而操作系统也有一个域名解析的过程。
2020-09-22 00:22:57
995
原创 十种排序算法详解&Java实现(Leetcode | 912. 排序数组 )
排序算法一、简单选择排序二、直接插入排序三、冒泡排序四、快速排序五、归并排序六、堆排序一、简单选择排序二、直接插入排序三、冒泡排序四、快速排序五、归并排序六、堆排序...
2020-09-21 18:11:29
577
原创 Leetcode【搜索回溯】| 47.全排列 II
Leetcode | 47.全排列 II题目解题回溯+决策树标记判断重复题目给定一个可包含重复数字的序列,返回所有不重复的全排列。示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]解题回溯+决策树 该题是Leetcode【回溯框架 递归】| 46. 全排列的进阶版,加了一个条件,即给定序列中有重复的元素。全排列的解决和回溯框架的介绍可以看这篇博文,我们需要额外解决的就是,在决策/选择的时候,如果避免重复? 我初始的想
2020-09-18 17:32:06
165
原创 数据结构【java】| 堆
堆定义构建堆(Java实现)大顶堆小顶堆建堆定义 堆(Heap)是一种数据结构。通常是一个能被看作树结构的数组对象,即可以理解为树结构,但是用数组存储。堆需要满足的性质: 1、堆中某个节点的值总是不大于或不小于其父节点的值; 2、堆总是一颗完全二叉树。 常见的堆有二叉堆,斐波那契堆等。 大根堆:也叫大顶堆,最大堆,所有父节点都满足大于等于其子节点的值的堆。 小根堆:也叫小顶堆,最小堆,所有父节点都满足小于等于其子节点的值的堆。 堆是一个完全二叉树,但是存储在数组中,父节点和孩子节点的关系由数
2020-09-09 16:52:06
277
原创 Leetcode【固定左边界+双指针】| 15. 三数之和 & 16. 最接近的三数之和
目录Leetcode | 15. 三数之和题目解题排序+双指针排序+哈希Leetcode | 16. 最接近的三数之和题目解题思路(排序+双指针)Java实现Leetcode | 15. 三数之和题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组
2020-06-24 10:00:56
199
原创 Leetcode【动态规划】| 正则表达式匹配
题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1: 输入: s = “aa” p = “a” 输出: false 解释: “a” 无法匹配 “aa” 整个字符串。
2020-06-20 18:57:24
226
原创 Leetcode【固定左右边界 前缀和/动态规划】 | 363. 矩形区域不超过K的最大数值和(JAVA详细注释)
题目给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和。示例: 输入: matrix = [[1,0,1],[0,-2,3]], k = 2 输出: 2解释: 矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。说明: 矩阵内的矩形区域面积必须大于 0。 如果行数远大于列数,你将如何解答呢?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problem
2020-06-04 19:48:14
394
原创 Leetcode【动态规划】| 837. 新21点
题目爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下:爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次抽取都是独立的,其结果具有相同的概率。当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是多少?示例 1 输入:N = 10, K = 1, W = 10 输出:1.00000 说明:爱丽丝得到一张卡,然后停止。示例 2: 输入:N =
2020-06-03 13:08:24
224
原创 Leetcode【递归 栈 队列 双指针】| 101. 对称二叉树
题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 /\ 2 2 /\ /\ 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 /\ 2 2 \ \ 3 3进阶:你可以运用递归和迭代两种方法解决这个问题吗?解题思路 刚开始会想到用中序遍历结果来比较是否对称,但此方法不可行,因为中序遍历结果存储的是每个结点的值,不
2020-06-01 19:13:27
184
原创 Leetcode【快慢指针】| 287. 寻找重复数
题目给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1: 输入: [1,3,4,2,2] 输出: 2示例 2: 输入: [3,1,3,4,2] 输出: 3说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数组中只有一个重复的数字,但它可能不止重复出现一次。来源:力扣(LeetCode)链接
2020-05-26 21:08:07
495
1
原创 Leetcode【快慢指针 链表找环思想】| 202. 快乐数
这里写自定义目录标题题目解题思路java实现题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例: 输入:19 输出:t...
2020-05-26 15:30:00
220
原创 Leetcode【递归】| 105. 从前序与中序遍历序列构造二叉树
题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 /\ 9 20 /\ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-trav
2020-05-22 16:08:01
213
原创 Leetcode【双指针 前缀和 哈希】| 1. 两数之和 & 560. 和为K的子数组 & 974. 和可被 K 整除的子数组
题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subarray-sum-equals-
2020-05-15 21:41:47
371
原创 Leetcode | 155. 最小栈(java实现)
Leetcode【栈】| 155. 最小栈题目解题题目分析两个栈实现题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。示例:输入: [“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”] [ [], [-2],
2020-05-12 18:12:24
298
原创 Leetcode【线性规划】| 221. 最大正方形
题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square解题思路可以把这个二维矩阵问题想象成直方图问题,就和很多已做过的柱状图问题类似了。把值为1的想象为柱状图。如示例二维矩阵可想象为如下:.
2020-05-08 21:55:33
586
原创 Leetcode【递归】| 572. 另一个树的子树
题目给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1: 给定的树 s: 3 /\ 4 5 /\ 1 2 给定的树 t: 4 /\ 1 2 返回 true,因为 t 与 s 的一个子树...
2020-05-07 17:40:44
149
原创 Java实现二叉树的先序遍历、中序遍历、后序遍历和层序遍历(Leetcode 94、102、144、145题)
二叉树的先序遍历、中序遍历、后序遍历和层序遍历先序遍历(Leetcode 144)中序遍历(Leetcode 94)后序遍历(Leetcode 145)层序遍历(Leetcode 102) 树的先序遍历、中序遍历和后序遍历其实就是树的dfs深度优先遍历方式,只是在深度优先的基础上,左孩子、右孩子和根节点遍历的前后顺序不同罢了。DFS实现有递归实现和栈实现两种,所以这三种遍历方法也分别有这两种实现...
2020-05-06 19:30:39
617
原创 Leetcode【动态规划】| 983. 最低票价
题目在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式: 一张为期一天的通行证售价为 costs[0] 美元; 一张为期七天的通行证售价为 costs[1] 美元; 一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无限制的...
2020-05-06 15:00:11
304
原创 Leetcode【中序遍历 递归】| 98. 验证二叉搜索树
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1: 输入: 2 /\ 1 3 输出: true示例 2: 输入: 5 /\ 1 4 /\ 3 6 ...
2020-05-05 21:55:02
437
原创 Leetcode【贪心】| 45. 跳跃游戏 II
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例: 输入: [2,3,1,1,4] 输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明: 假设你总是可以到达数组的最后一个位置...
2020-05-04 17:00:47
230
原创 总结 | Java字符串常用操作(方法)
Java String类创建字符串创建一个String对象,并初始化一个值。String类是不可改变的,一旦创建了一个String对象,它的值就不能改变了。如果想对字符串做修改,需要使用StringBuffer&StringBuilder类。//直接创建方式String str1 = "abc";//提供一个字符数组参数来初始化字符串char[] strarray = {'...
2020-05-03 18:17:43
31671
5
原创 Leetcode | 21. 合并两个有序链表 (java)
Leetcode | 21. 合并两个有序链表 题目解题思路递归实现迭代实现题目将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-...
2020-05-01 10:25:52
223
原创 Leetcode【二分查找】| 1095. 山脉数组中查找目标值
Leetcode | 1095. 山脉数组中查找目标值题目解题思路java实现题目这是一个 交互式问题给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。如果不存在这样的下标 index,就请返回 -1。何为山脉数组?如果数组 A 是一个山脉数组的话,那它满足如下条件:首先,A....
2020-04-29 10:44:00
293
原创 位运算:按位与、按位或、按位异或、按位非(补码 反码)
位运算有四种:按位与&、按位或 | 、按位异或^、按位非~& :任意二进制位与0进行&运算,结果是0;与1进行&运算,结果是其原值。a&0 = 0;a&1 = a。| :任意二进制位与0进行 | 运算,结果为其原值;与1进行 | 运算,结果为0。a | 0 = a;a | 1 = 0。^ :任意相同二进制位进行^运算,结果为0;任意不同二进制...
2020-04-28 17:15:59
22230
3
原创 Leetcode【异或 位运算】| 面试题56 - I. 数组中数字出现的次数(java详细注释版)& 260. 只出现一次的数字 III
Leetcode | 面试题56 - I. 数组中数字出现的次数题目解题基础(位运算介绍)解题思路java实现题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1: 输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1]示例 2: 输入:nums = [1,...
2020-04-28 16:17:01
298
原创 错误解决 | java报错 “error: bad operand types for binary operator” & 位运算符优先级
int restmp = 0;int mask = 1;while(restmp & mask == 0)//错误报错:bad operand types for binary operator ‘&’原因:其实是运算符的优先级问题,对位运算符来说,恒等运算符优先级比位运算符更大,这样写相等于 restmp & (mask == 0),&左边为int型,&...
2020-04-28 14:20:07
5199
原创 Leetcode【二分查找】| 33. 搜索旋转排序数组
Leetcode | 33. 搜索旋转排序数组题目解题思路直接二分查找法递归实现非递归实现将旋转数组查找变为有序数组查找题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。...
2020-04-27 14:23:24
264
原创 Leetcode【分治 链表】| 23. 合并K个排序链表
Leetcode | 23. 合并K个排序链表题目解题顺序依次合并合并2链表递归实现合并2链表迭代实现两两成对合并(分治)题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4-...
2020-04-26 21:19:48
235
原创 Leetcode【回溯框架 递归】| 46. 全排列
Leetcode | 46. 全排列题目解题动态规划递归回溯 决策树题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr...
2020-04-25 22:28:38
195
原创 Leetcode【分治 归并排序】| 面试题51. 数组中的逆序对
Leetcode | 面试题51. 数组中的逆序对题目解题暴力解法分治思想 归并排序思路java实现题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1: 输入: [7,5,6,4] 输出: 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sh...
2020-04-24 22:02:59
351
原创 Leetcode【动态规划】| 面试题 08.11. 硬币
Leetcode | 面试题 08.11. 硬币题目解题动态规划思路java实现优化数学思路题目给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额: 5=5 5=1+1+1+1+1示例2: 输入: n =...
2020-04-23 22:26:12
416
原创 Leetcode【树 DFS BFS】| 199. 二叉树的右视图
Leetcode | 199. 二叉树的右视图题目解题DFS解法BFS解法题目给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 <— / 2 3 <— \ ...
2020-04-22 12:23:19
248
原创 Leetcode【滑动窗口 双指针】| 1248. 统计「优美子数组」
Leetcode| 1248. 统计「优美子数组」题目解题思路(其实是种滑动窗口的思想)java实现优化上述题解的优化双指针解法题目给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。 示例 1: 输入:nums = [1,1,2,1,1], k = 3 输出:2...
2020-04-21 12:54:39
246
原创 Leetcode【DFS BFS】| 200. 岛屿数量(java详细注释版)
Leetcode | 200. 岛屿数量题目解题思路DFS解法BFS解法题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1: 输入: 11110 11010 11000 00000 输出: 1示例 2:...
2020-04-20 15:21:54
518
原创 Leetcode【双指针】| 11. 盛最多的容器
Leetcode | 11. 盛最多的容器题目解题暴力解法双指针解法思路双指针的正确性证明java实现优化题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。**说明:**你不能倾斜容器,且 n...
2020-04-18 17:01:44
168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人