- 博客(130)
- 资源 (3)
- 收藏
- 关注
原创 647.回文子串
647.回文子串 解题思路: 中心扩散法 Manacher 算法 package leadcode; /** * @author : icehill * @description : 回文子串 * 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 * 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 * 示例 1: * 输入:"abc" * 输出:3 * 解释:三个回文子串: "a", "b", "c" * 示例 2: * 输入:"aaa
2021-05-28 18:15:37
206
原创 56.合并区间
56.合并区间 解题思路: 排序+合并区间 package leadcode; import java.util.Arrays; import java.util.Comparator; /** * @author : icehill * @description : 合并区间 * 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
2021-05-28 17:26:07
135
原创 260.只出现一次的数字 III
260.只出现一次的数字 III 解题思路: 利用异或规则:相同数字异或结果为0,一个数字与0异或结果不变 package leadcode; import java.util.Arrays; /** * @author : icehill * @description : 只出现一次的数字III * 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 * 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 * 进阶:你的算法应该具有线性时间复杂度。
2021-05-27 00:41:28
118
原创 Redis内存淘汰机制
Redis内存淘汰机制 内存淘汰机制就能保证在redis内存占用过高的时候,去进行内存淘汰,也就是删除一部分key,保证redis的内存占用率不会过高,那么它会淘汰哪些key呢?Redis目前共提供了8种内存淘汰策略,含Redis 4.0版本之后又新增的两种LFU模式:volatile-lfu和allkeys-lfu。 内存淘汰机制由redis.conf配置文件中的maxmemory-policy属性设置,没有配置时默认为no-eviction模式。 no-eviction 当内存不足以容纳新写入数
2021-05-26 10:40:45
545
原创 693.交替位二进制数
693.交替位二进制数 解题思路: package leadcode; /** * @author : icehill * @description : 交替位二进制数 * 给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。 * 示例 1: * 输入:n = 5 * 输出:true * 解释:5 的二进制表示是:101 * 示例 2: * 输入:n = 7 * 输出:false * 解释:7 的二进制表示是:111. *
2021-05-24 00:36:50
233
原创 338.比特位计数
338.比特位计数 解题思路:动态规划,找出动态规划方程组:dp[i]=dp[i-1]+1或者dp[i>>1] package leadcode; import java.util.Arrays; /** * @author : icehill * @description : 比特位计数 * 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 * 示例 1: * 输入: 2 * 输出: [0,1,
2021-05-24 00:06:48
101
原创 342.4的幂
342.4的幂 解题思路:利用位运算以及规律:判断2的幂:x>0&&(x&(x-1))==0,x & (x - 1)其实就是把数字最后一位1变为0,也就是检查数字x是否只有一个1 package leadcode; /** * @author : icehill * @description : 4的幂 * 给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 * 整数 n 是 4 的幂次方需满足:存在整数
2021-05-23 21:12:38
101
原创 461.汉明距离
461.汉明距离 解题思路:位运算 package leadcode; /** * @author : icehill * @description : 汉明距离 * 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 * 给出两个整数 x 和 y,计算它们之间的汉明距离。 * 注意: * 0 ≤ x, y < 2^31. * 示例: * 输入: x = 1, y = 4 * 输出: 2 * 解释: * 1 (0 0 0 1) * 4 (0 1 0
2021-05-23 17:54:26
102
原创 739.每日温度
739.每日温度 解题思路: package leadcode; import java.util.Arrays; import java.util.Deque; import java.util.LinkedList; /** * @author : icehill * @description : 每日温度 * 请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。 * 如果气温在这之后都不会升高,请在该位置用 0 来代替。 * 例如,给定一
2021-05-23 17:39:22
96
原创 255.最小栈
255.最小栈 解题思路: package leadcode; import java.util.LinkedList; /** * @author : icehill * @description : 最小栈 * 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 * push(x) —— 将元素 x 推入栈中。 * pop() —— 删除栈顶的元素。 * top() —— 获取栈顶元素。 * getMin() —— 检索栈中的最小元素。 * 示例:
2021-05-23 16:40:25
103
原创 232.用栈实现队列
232.用栈实现队列 解题思路:双栈 package leadcode; import java.util.Deque; import java.util.LinkedList; /** * @author : icehill * @description : 用栈实现队列 * 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): * 实现 MyQueue 类: * void push(int x) 将元素 x 推到队列的末尾 *
2021-05-23 15:34:02
89
原创 769.最多能完成排序的块
769.最多能完成排序的块 解题思路: package leadcode; /** * @author : icehill * @description : 最多能完成排序的块 * 数组arr是[0, 1, ..., arr.length - 1]的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 * 我们最多能将数组分成多少块? * 示例 1: * 输入: arr = [4,3,2,1,0] * 输出: 1 *
2021-05-21 12:26:09
99
原创 240.搜索二维矩阵II
240.搜索二维矩阵II 解题思路: package leadcode; /** * @author : icehill * @description : 搜索二维矩阵II * 编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: * 每行的元素从左到右升序排列。 * 每列的元素从上到下升序排列。 * 示例 1: * 输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,1
2021-05-21 12:04:37
103
原创 74.搜索二维矩阵
74.搜索二维矩阵 解题思路: package leadcode; /** * @author : icehill * @description : 搜索二维矩阵 * 编写一个高效的算法来判断m x n矩阵中,是否存在一个目标值。该矩阵具有如下特性: * 每行中的整数从左到右按升序排列。 * 每行的第一个整数大于前一行的最后一个整数。 * 示例 1: * 输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 * 输出
2021-05-21 11:47:47
147
原创 48.旋转图像
48.旋转图像 解题思路 package leadcode; /** * @author : icehill * @description : 旋转图像 * 给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。 * 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 * 示例 1: * 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] * 输出:[[7,4,1],[8,5,2],[9
2021-05-21 00:19:50
100
原创 448.找到所有数组中消失的数字
448.找到所有数组中消失的数字 解题思路: package leadcode; import java.util.ArrayList; import java.util.List; /** * @author : icehill * @description : 找到所有数组中消失的数字 * 给定一个范围在 1 ≤ a[i] ≤ n (n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 * 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 * 您能在
2021-05-20 17:03:36
123
原创 347.前K个高频元素
347.前K个高频元素 解题思路: package leadcode; import java.util.*; /** * @author : icehill * @description : 前K个高频元素 * 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 * 示例 1: * 输入: nums = [1,1,1,2,2,3], k = 2 * 输出: [1,2] * 示例 2: * 输入: nums = [1], k
2021-05-19 17:57:25
116
原创 常用排序算法
常用排序算法 选择排序、插入排序、冒泡排序、快速排序、归并排序 package leadcode.lib; import java.util.Arrays; /** * @author : icehill * @description : 排序算法 * @date : 2021-05-19 */ public class Sort { public static void main(String[] args) { Sort sort = new Sort(); //
2021-05-19 15:33:40
106
原创 33.搜索旋转排序数组
33.搜索旋转排序数组 解题思路: package leadcode; /** * @author : icehill * @description : 搜索旋转排序数组 * 整数数组 nums 按升序排列,数组中的值 互不相同 。 * 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums
2021-05-19 11:51:40
71
原创 81.搜索旋转排序数组II
81.搜索旋转排序数组II 解题思路: package leadcode; /** * @author : icehill * @description : 搜索旋转排序数组II * 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。 * 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[
2021-05-19 11:51:02
89
原创 35.搜索插入位置
35.搜索插入位置 解题思路: package leadcode; /** * @author : icehill * @description : 搜索插入位置 * 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 * 你可以假设数组中无重复元素。 * 示例 1: * 输入: [1,3,5,6], 5 * 输出: 2 * 示例2: * 输入: [1,3,5,6], 2 * 输出: 1 * 示例 3: * 输入
2021-05-18 16:08:14
81
原创 76.最小覆盖子窜
76.最小覆盖子窜 解题思路:双指针滑动窗口 package leadcode; import java.util.HashMap; import java.util.Map; /** * @author : icehill * @description : 最小覆盖子窜 * 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果s中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 * 注意:如果s中存在这样的子串,我们保证它是唯一的答案。 * 示例 1
2021-05-18 15:44:18
130
原创 31.下一个排列
31.下一个排列 解题思路: package leadcode; import java.util.Arrays; /** * @author : icehill * @description : 下一个排列 * 实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 * 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 * 必须 原地 修改,只允许使用额外常数空间。 * 示例 1: * 输入:nums = [1,2,3] * 输
2021-05-17 00:14:11
163
原创 142.环形链表II
142.环形链表II 解题思路: package leadcode; import leadcode.lib.ListNode; import leadcode.lib.ListNodeInit; import java.util.HashSet; import java.util.Set; /** * @author : icehill * @description : 环形链表II * 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 * 为了表示给定链表中的
2021-05-14 22:25:43
117
原创 83.删除排序连表中的重复元素
83.删除排序连表中的重复元素 解题思路: package leadcode; import leadcode.lib.ListNode; import leadcode.lib.ListNodeInit; /** * @author : icehill * @description : 删除排序连表中的重复元素 * 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 * 返回同样按升序排列的结果链表。 * 示例 1: * 输入:hea
2021-05-14 20:08:01
104
原创 167.两数之和II-输入有序数组
167.两数之和II-输入有序数组 解题思路: package leadcode; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * @author : icehill * @description : 两数之和II-输入有序数组 * 给定一个已按照 升序排列的整数数组numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。 * 函数应该以长度为 2 的整数数组的形式
2021-05-14 14:25:41
93
原创 130.被围绕的区域
130.被围绕的区域 解题思路 package leadcode; /** * @author : icehill * @description : 被围绕的区域 * 给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域, * 并将这些区域里所有的 'O' 用 'X' 填充。 * 解题思路: * 深度优先搜索 * 时间复杂度:O(m*n) 空间复杂度:O(m*n)(深度优先搜索的栈的开销) * @date : 2021-05-09
2021-05-09 23:33:05
79
原创 215.数组中的第k个最大元素
215.数组中的第k个最大元素 解题思路: 1.基于快排的的选择 (快排时间复杂度是O(n*logn)) 但我们实际上只需要找到倒数第k个元素,快排是基于partition的分治法,我们只需要找到某次划分得到的index正好是我们需要的k即可 2.基于堆排序的选择方法 package leadcode; /** * @author : icehill * @description : 数组中的第K个最大元素 * 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个
2021-05-09 22:13:41
112
原创 139.单词拆分
139.单词拆分 解题思路:动态规划 package leadcode; import java.util.*; /** * @author : icehill * @description : 单词拆分 * 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 * 说明: * 拆分时可以重复使用字典中的单词。 * 你可以假设字典中没有重复的单词。 * 示例 1: * 输入: s = "leetcode", wo
2021-05-07 01:30:35
99
原创 227.基本计算器II
227.基本计算器II 解题思路:使用辅助栈 package leadcode; import java.util.Deque; import java.util.LinkedList; /** * @author : icehill * @description : 基本计算器II * 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 * 整数除法仅保留整数部分。 * 示例 1: * 输入:s = "3+2*2" * 输出:7 * 示例 2: * 输入:s =
2021-05-05 11:47:55
233
原创 287.寻找重复数
287.寻找重复数 解题思路: 1.快慢指针(floyd判圈算法,龟兔赛跑) 2.哈希表 3.二分查找 package leadcode; import java.util.HashSet; import java.util.Set; /** * @author : icehill * @description : 寻找重复数 * 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。 * 假设 nums 只有 一个
2021-05-05 00:41:42
127
原创 75.颜色分类
75.颜色分类 解题思路: package leadcode; import java.util.Arrays; /** * @author : icehill * @description : 颜色分类 * 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序, * 使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 * 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 * 示例 1: * 输入:nums = [2,0,2,1,1,0] *
2021-05-04 21:36:16
123
原创 98.验证二叉搜索树
98.验证二叉搜索树 解题思路 package leadcode; import leadcode.lib.TreeNode; import leadcode.lib.TreeNodeInit; /** * @author : icehill * @description : 验证二叉搜索树 * 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 * 假设一个二叉搜索树具有如下特征: * 节点的左子树只包含小于当前节点的数。 * 节点的右子树只包含大于当前节点的数。 * 所有左子树和右子树
2021-05-04 20:36:03
99
原创 234.回文链表
234.回文链表 解题思路: package leadcode; import leadcode.lib.ListNode; import leadcode.lib.ListNodeInit; import java.util.ArrayList; import java.util.List; /** * @author : icehill * @description : 回文链表 * 请判断一个链表是否为回文链表。 * 示例 1: * 输入: 1->2 * 输出: false
2021-05-04 17:22:25
106
原创 79.单词搜索
79.单词搜索 解题思路: package leadcode; /** * @author : icehill * @description : 单词搜索 * <p> * 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 * 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。 * 同一个单元格内的字母不允许被重复使用。 *
2021-05-04 15:18:02
187
原创 15.三数之和
15.三数之和 解题思路: package leadcode; import java.util.*; /** * @author : icehill * @description : 三数之和 * 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c , * 使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 * 注意:答案中不可以包含重复的三元组。 * 示例 1: * 输入:nums = [-1,0,1,2,-1,-4]
2021-05-04 13:38:43
96
原创 70.爬楼梯
70.爬楼梯 解题思路: 1.动态规划 2.递归(跟动态规划使用同样的公式,只不过动态规划避免了重复处理) 3.更快的数学解法(矩阵快速幂、通项公式) package leadcode; /** * @author : icehill * @description : 爬楼梯 * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? * 注意:给定 n 是一个正整数。 * <p> * 示例 1: * 输入
2021-05-04 00:27:08
80
原创 55.跳跃游戏
55.跳跃游戏 解题思路: 贪心法 1.正向 2.逆向 package leadcode; /** * @author : icehill * @description : 跳跃游戏 * 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 * 数组中的每个元素代表你在该位置可以跳跃的最大长度。 * 判断你是否能够到达最后一个下标。 * 示例 1: * 输入:nums = [2,3,1,1,4] * 输出:true * 解释:可以先跳 1 步,从下标 0 到达下标 1,
2021-05-03 23:56:46
79
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人