LeetCode练习
文章平均质量分 67
Leetcode 入门级教程,读完速刷200道,搞定大部分算法面试问题,现在专栏全场9.9,全场9.9...
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
水田如雅
不生产代码,只是代码的搬运工
展开
-
前缀和—— 一维数组和二维数组的前缀和
一维数组前缀和定义应用示例二维数组前缀和定义应用示例原创 2021-09-28 21:56:15 · 304 阅读 · 2 评论 -
动态规划问题3--多重背包
多重背包问题描述及其代码在01背包的基础上,01背包是每个物品有一个,所以只能放入一次,此时我们再加入一个物品个数的数组s,表示每个物品的个数,多重背包介于01背包和完全背包中间,加入了判断物品个数的一个维度,我们可以在01背包基础上,增改下代码(这里面我们直接上一维数组的了,不讲空间优化了,有兴趣的可以去看前面写过的背包问题,已经写过了):/** * @param V 最大容量 * @param C 物品个数 * @param v 价值数组 * @param w原创 2021-09-09 17:51:07 · 266 阅读 · 0 评论 -
动态规划2——完全背包问题解析
完全背包问题描述有C种物品和一个容量为V的背包,每种物品都有无限件。第i件物品的体积是v[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。与之前的01背包不同的是,每个物品都有无限个,对于同一个物品,可以放置多个。基本解法首先还是先来用基本解法来一遍,不带优化的。先看多个物品的状态转移方程。当不选择该物品时候,这个时候值跟01背包的一样,还是dp[i - 1][fv];当选择该物品时候,对于一个固定容量,如果该物品能被放进去,要想价值最大,原创 2021-09-07 18:50:38 · 263 阅读 · 0 评论 -
动态规划1 —— 01背包详解
从斐波那契数列说起斐波那契数列(Fibonacci sequence),对于n(n>=0),n=0时,f(0)=0;n=1时,f(1)=1;n=2时,f(2)=f(0)+f(1);n=3时,f(2)=f(1)+f(2);以此类推…求解f(n)。最早 ,我们可能在课本上学过,这是个经典的递归问题,于是,能很很快写出递归的代码: public int fib(int N) { if (N == 0) { return 0; }原创 2021-09-03 18:37:14 · 341 阅读 · 0 评论 -
并查集模板1-路径压缩和按秩合并
并查集的概念引人并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中。其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。并查集是一种树型的数据结构,原创 2021-03-27 14:04:44 · 323 阅读 · 0 评论 -
将二叉搜索树构建为高度平衡二叉树的方法1--拆解为有序数组,构建高度平衡二叉树
/** * 先得到值,之后重建 * * @param root * @return */ public TreeNode balanceBST(TreeNode root) { if (root == null) { return null; } List<Integer> data = new ArrayList<>(); inOrde.原创 2020-10-06 14:21:49 · 260 阅读 · 0 评论 -
LeetCode刷题指南——数据结构
年后开始在刷LeetCode,刚开始就是从第一道题开始刷,后来刷了几道题之后,发现自己数据结构方面的知识好像忘得都差不多了,艾玛,就想着按照分类刷,又过了一段时间,我感觉刷起来还是有点儿艰难,就决定先刷下数据结构的基础知识:数据结构 刷完基础之后,再按照分类开始刷题。PS:我的LeetCode主页:https://leetcode-cn.com/soledadvac/ ;GitHub部分代码:...原创 2019-04-29 23:07:39 · 801 阅读 · 0 评论 -
超简单KMP实现讲解
最长公共前后缀 /** * 获取最长公共前后缀长度 * * @param s * @return */ private int[] getNext(String s) { int[] result = new int[s.length()]; int len = 0, i = 1; while (i < s.length()) { if (s.charAt(i) == s原创 2020-07-16 15:06:43 · 960 阅读 · 3 评论 -
求解最长回文字串——Manacher 算法
之前用动态规划法和中心扩散法求解过这个问题,复习戳这里:LeetCode——5,最长回文子串,看这篇之前,如果不是很明白这个问题的通用解法,先看懂这个再往下看。鉴于dp和中心扩散法,时间复杂度都为n,在这里,我们对中心扩散法进行优化,去掉多次访问同一位置,将中心扩散法优化为时间复杂度为n的算法。 /** * Manacher -- n复杂度算法 * * @param s * @return */ public String longestPali原创 2020-07-09 15:34:15 · 401 阅读 · 0 评论 -
LeetCode——5,最长回文子串
/** * \* Created: liuhuichao * \* Date: 2019/2/19 * \* Time: 5:41 PM * \* Description: 最长回文子串 * <p> * 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 * <p> * 示例 1: * <p> * 输入: "babad" * 输出: "bab" * 注意: "aba" 也是一个有效答案。 * 示例 2: *原创 2020-07-09 11:21:43 · 232 阅读 · 0 评论 -
LRU Cache实现--Java版
LRU全名是:Least recently use 简单的说就是:最近最少使用。核心思想有以下几点:1,当空间不足时候,先淘汰掉最不常使用到的数据。2,经常访问到的数据的优先级比较高。下面来看几种LRU Cache的简单java实现。使用LinkedList实现class Node { int key; int value; Node(int key, int value) { this.key = key;原创 2020-07-04 14:18:49 · 296 阅读 · 0 评论 -
LeetCode——215,数组中的第K个最大元素(分治法)
/** * \* Created: liuhuichao * \* Date: 2020/1/27 * \* Time: 11:32 上午 * \* Description: 数组中的第K个最大元素 * \ * 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 * <p> * 示例 1: * ...原创 2020-02-02 20:53:59 · 1043 阅读 · 0 评论 -
Leetcode——145,二叉树后序遍历
/** * \* Created: liuhuichao * \* Date: 2019/8/21 * \* Time: 28:08 PM * \* Description: 二叉树的后序遍历 : 后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点 * \ * 给定一个二叉树,返回它的 后序 遍历。 * <p> * 示例: * <p> ...原创 2019-08-22 22:49:35 · 387 阅读 · 0 评论 -
LeetCode——297,二叉树的序列化与反序列化
/** * \* Created: liuhuichao * \* Date: 2019/8/27 * \* Time: 28:23 PM * \* Description: 二叉树的序列化与反序列化 * \ * 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。...原创 2019-08-31 12:20:02 · 319 阅读 · 0 评论 -
LeetCode——236,二叉树的最近公共祖先
/** * \* Created: liuhuichao * \* Date: 2019/8/27 * \* Time: 27:30 PM * \* Description: 二叉树的最近公共祖先 * \ * 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 * <p> * 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为...原创 2019-08-31 12:18:54 · 258 阅读 · 0 评论 -
LeetCode——101,对称二叉树
/** * \* Created: liuhuichao * \* Date: 2019/8/22 * \* Time: 35:53 AM * \* Description: 对称二叉树 * 给定一个二叉树,检查它是否是镜像对称的。 * <p> * 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 * <p> * 1 * / \ * ...原创 2019-08-31 12:13:46 · 332 阅读 · 0 评论 -
LeetCode——104,二叉树的最大深度
/** * \* Created: liuhuichao * \* Date: 2019/8/22 * \* Time: 35:25 AM * \* Description: 二叉树的最大深度 * \ * 给定一个二叉树,找出其最大深度。 * <p> * 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 * <p> * 说明: 叶子节...原创 2019-08-31 12:12:22 · 199 阅读 · 1 评论 -
Leetcode—— 104,二叉树的最大深度
/** * \* Created: liuhuichao * \* Date: 2019/8/22 * \* Time: 35:25 AM * \* Description: 二叉树的最大深度 * \ * 给定一个二叉树,找出其最大深度。 * <p> * 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 * <p> * 说明: 叶子节...原创 2019-08-22 22:51:29 · 210 阅读 · 0 评论 -
BST基本操作——搜索,插入,删除
搜索public TreeNode searchBST(TreeNode root, int val) { if (root == null) { return null; } if (root.val == val) { return root; } if (root...原创 2019-09-01 10:34:47 · 542 阅读 · 0 评论 -
LeetCode——703,数据流中的第K大元素
/** * \* Created: liuhuichao * \* Date: 2019/8/29 * \* Time: 35:22 AM * \* Description: 数据流中的第K大元素 * \ * 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 * <p> * 你的 KthLargest ...原创 2019-09-01 10:36:42 · 457 阅读 · 0 评论 -
LeetCode——110,判断平衡二叉树
/** * \* Created: liuhuichao * \* Date: 2019/8/29 * \* Time: 30:09 PM * \* Description: 判断平衡二叉树 * \ * 给定一个二叉树,判断它是否是高度平衡的二叉树。 * <p> * 本题中,一棵高度平衡二叉树定义为: * <p> * 一个二叉树每个节点 的左右...原创 2019-09-01 10:39:28 · 873 阅读 · 0 评论 -
LeetCode——108,将有序数组转换为二叉搜索树
/** * \* Created: liuhuichao * \* Date: 2019/8/29 * \* Time: 32:32 PM * \* Description: 将有序数组转换为二叉搜索树 * \ * 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 * <p> * 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对...原创 2019-09-01 10:40:39 · 314 阅读 · 0 评论 -
N叉树的遍历
前序遍历 public List<Integer> preorder(Node root) { List<Integer> res = new ArrayList<>(); if (root == null) { return res; } res.add(root.val...原创 2019-09-02 22:45:29 · 1671 阅读 · 0 评论 -
实现前缀树
class TrieNode { Boolean isWord; Character c; List<TrieNode> next; TrieNode() { isWord = false; } TrieNode(Character c) { ...原创 2019-09-02 22:47:26 · 368 阅读 · 0 评论 -
常见位运算汇总(java)
最近发现了很多挺有意思的位运算,有时候位运算解决问题还是挺简单的,(建议看一下原码,反码,补码的概念再来看下面的代码)记录下常用的一些位运算: public class BitManipulationClass { /** * 逐位输出整数的每一位 * * @param num * @return */ public i...原创 2019-09-19 00:13:40 · 380 阅读 · 0 评论 -
LeetCode——67,二进制求和
/** * \* Created: liuhuichao * \* Date: 2019/4/22 * \* Time: 6:16 PM * \* Description:二进制求和 * <p> * 给定两个二进制字符串,返回他们的和(用二进制表示)。 * <p> * 输入为非空字符串且只包含数字 1 和 0。 * <p> * 输入: a =...原创 2019-04-23 15:36:52 · 405 阅读 · 0 评论 -
Leetcode——94,二叉树中序遍历
/** * \* Created: liuhuichao * \* Date: 2019/7/16 * \* Time: 31:57 PM * \* Description:二叉树的中序遍历 : 中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树 * \ * 给定一个二叉树,返回它的中序 遍历。 * <p> * 示例: * <p> * 输入...原创 2019-08-22 22:48:46 · 295 阅读 · 0 评论 -
Leetcode——144,二叉树前序遍历
/** * \* Created: liuhuichao * \* Date: 2019/8/21 * \* Time: 27:39 PM * \* Description: 二叉树的前序遍历 : 前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树 * \ * 给定一个二叉树,返回它的 前序 遍历。 * <p> * 示例: * &l...原创 2019-08-22 22:47:50 · 193 阅读 · 0 评论 -
LeetCode——27,移除元素
/** * \* Created: liuhuichao * \* Date: 2019/4/23 * \* Time: 7:32 PM * \* Description: 移除元素 * 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 * <p> * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 ...原创 2019-04-23 22:11:17 · 387 阅读 · 0 评论 -
LeetCode——167,两数之和 II - 输入有序数组
/** * \* Created: liuhuichao * \* Date: 2019/4/23 * \* Time: 6:21 PM * \* Description: 两数之和 II - 输入有序数组 * 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 * <p> * 函数应该返回这两个下标值 index1 和 index2,其中 in...原创 2019-04-23 22:10:05 · 332 阅读 · 0 评论 -
LeetCode——561,数组拆分 I
/** * \* Created: liuhuichao * \* Date: 2019/4/23 * \* Time: 5:43 PM * \* Description: 数组拆分 I * 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。 ...原创 2019-04-23 22:08:59 · 514 阅读 · 0 评论 -
LeetCode—— 344,反转字符串
/** * \* Created: liuhuichao * \* Date: 2019/4/23 * \* Time: 5:34 PM * \* Description: 反转字符串 * <p> * 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 * <p> * 不要给另外的数组分配额外的空间,你必须原地修改...原创 2019-04-23 22:07:39 · 601 阅读 · 0 评论 -
LeetCode——14,最长公共前缀
/** * \* Created: liuhuichao * \* Date: 2019/4/23 * \* Time: 3:28 PM * \* Description: 最长公共前缀 * <p> * 编写一个函数来查找字符串数组中的最长公共前缀。 * <p> * 如果不存在公共前缀,返回空字符串 ""。 * <p> * 示例 1: * ...原创 2019-04-23 21:55:58 · 581 阅读 · 0 评论 -
LeetCode——28,实现 strStr() 函数
/** * \* Created: liuhuichao * \* Date: 2019/4/23 * \* Time: 11:25 AM * \* Description: 实现 strStr() 函数 * <p> * 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如...原创 2019-04-23 15:38:45 · 395 阅读 · 0 评论 -
LeetCode——11, 盛最多水的容器(Container With Most Water)
/** * \* Created: liuhuichao * \* Date: 2019/3/13 * \* Time: 6:06 PM * \* Description:Tag=数组 * \ * <p> * 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。 * 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ...原创 2019-03-13 18:30:51 · 649 阅读 · 0 评论 -
LeetCode——846,一手顺子(Hand Of Straights)
/** * \* Created: liuhuichao * \* Date: 2019/3/13 * \* Time: 4:30 PM * \* Description: Tag=Map * <p> * 爱丽丝有一手(hand)由整数数组给定的牌。 * <p> * 现在她想把牌重新排列成组,使得每个组的大小都是 W,且由 W 张连续的牌组成。 * <...原创 2019-03-13 17:32:34 · 844 阅读 · 2 评论 -
LeetCode—— 498, 对角线遍历
/** * 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。 * <p> * 输入: * [ * [ 1(0,0), 2(0,1), 3(0,2) ], * [ 4(1,0), 5(1,1), 6(1,2) ], * [ 7(2,0), 8...原创 2019-03-19 18:41:53 · 330 阅读 · 0 评论 -
LeetCode——3,无重复字符的最长子串
/** * \* Created: liuhuichao * \* Date: 2019/2/16 * \* Time: 9:25 PM * \* Description: * \ * 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 * <p> * 示例 1: * <p> * 输入: "abcabcbb" * 输出: 3 * 解释:...原创 2019-02-17 17:35:36 · 337 阅读 · 0 评论 -
LeetCode——2,两数相加
/** * \* Created: liuhuichao * \* Date: 2019/2/15 * \* Time: 4:42 PM * \* Description: * <p> * <p> * 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 * <p>...原创 2019-02-16 21:55:47 · 516 阅读 · 0 评论 -
LeetCode——485,最大连续1的个数
/** * \* Created: liuhuichao * \* Date: 2019/4/23 * \* Time: 7:53 PM * \* Description:最大连续1的个数 * 给定一个二进制数组, 计算其中最大连续1的个数。 * <p> * 示例 1: * <p> * 输入: [1,1,0,1,1,1] * 输出: 3 * 解释: 开...原创 2019-04-23 22:12:26 · 596 阅读 · 0 评论