![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
文章平均质量分 59
LeetCode
IDOL小豆子
一起学习,一起成长,少写点bug。
全网唯一:IDOL小豆子
展开
-
无重复字符的最长字串(java版)
无重复字符的最长字串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 解法1:暴力破解 遍历所有的子串,找出最长的 解法2:滑动窗口 简单思路: 第一轮:[a] // 无重复字串,记录最大长度 1 第二轮:[a, b] // 无重复字串,记录最大长度 2 第三轮:[a, b, c] // 无重复字串,记录最大长度 3 第四轮:原创 2022-04-13 22:35:55 · 1537 阅读 · 0 评论 -
剑指 offer 7 斐波那契数列
斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n<=39 代码 public class 斐波那契数列 { // 递归,可以优化,将计算过的值存储起来 public int fib(int n) { if (n == 0){ return 0; } if (n == 1){ return 1;原创 2020-08-01 20:29:51 · 123 阅读 · 0 评论 -
剑指offer 6 旋转数组的最小数字
旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 分析 俩种方法: 直接遍历数组,找到最小的值,时间复杂度近似为O(n) 使用二分查找,时间复杂度近似为O(logn) 因为是非递减数列,所以,中间的值大于右边时,说明最小值在右边 中间值小于左边时,最小值在左边原创 2020-08-01 20:28:49 · 86 阅读 · 0 评论 -
剑指 offer 4 重建二叉树
重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 分析 /** * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 * 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 * 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉原创 2020-07-28 18:44:31 · 109 阅读 · 0 评论 -
剑指 offer 3 从尾到头打印列表
从尾到头打印列表 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 分析 可以将数据保存到一个数组中,然后逆序遍历,加入 list 递归 代码 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list = new ArrayList<>(); while (listNode != null原创 2020-07-28 18:43:32 · 82 阅读 · 0 评论 -
剑指offer 2 替换空格
替换空格 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 分析: 将一个字符替换为三个字符,字符串的长度增加,所以需要移动字符,在 java 中也可以使用 StringBuilder 进行拼接,但是需要额外的空间,在原字符串上进行移动,扩容的空间较少,这里对第二种进行分析 字符串的遍历有俩种 从左往右:替换一个字符后会覆盖原来的字符 从右往左:如果是空格就替换字符,不是空格就直接移动 源原创 2020-07-22 16:06:43 · 85 阅读 · 0 评论 -
剑指offer 1 二维数组中的查找
二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析: 首先,对于查找,我们最先能想到的就是遍历数组,挨个进行比较,但是效率是非常低的,最坏的时间复杂度是 O(n2),所以我们必须去优化它。**查找其实也就是排除的过程,只要排除的越多,说明效率越高,**像挨个遍历,每一次只能排除一个,所以效率低,题目中的二维数组是有规律的,例如要在下面的原创 2020-07-22 16:05:36 · 95 阅读 · 1 评论 -
和为 s 的连续正数序列
和为 s 的连续正数序列 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 /** * 双指针,滑动窗口 * * target = 9 * * 左指针 left = 0,右指针 right = 1; * sum = 3...原创 2020-03-06 21:46:18 · 115 阅读 · 0 评论 -
和为 s 的俩个数
和为 s 的俩个数 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 穷举法 /** * 穷举法 */ public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; ...原创 2020-03-06 21:45:29 · 91 阅读 · 0 评论 -
给定一个二叉树,检查它是否是镜像对称的。
一、题目描述 给定一个二叉树,检查它是否是镜像对称的。 二、分析 满足镜像对称的条件: 必须是俩个结点(t1,t2); t1,t2的值必须相等; t1的左结点和t2的右结点必须同时为空或者同时有值; t2的右结点和t1的左结点必须同时为空或者同时有值; 三、解法 1.使用递归 public boolean isSymmetric(TreeNode root) { return ...原创 2020-03-06 17:28:51 · 363 阅读 · 0 评论 -
根据前序遍历和中序遍历还原二叉树
一、题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 二、分析 由前序遍历的定义可以知道,数组中的每一个值都是当前子树的根结点,根据根结点在中序遍历中的位置,我们可以将这颗树分为左右俩个子树,分别在对...原创 2020-03-05 21:18:03 · 529 阅读 · 0 评论 -
使用俩个栈实现排序
使用俩个栈实现排序 public ArrayList<Integer> twoStacksSort(int[] numbers) { // 存放所有的数 Stack<Integer> initStack = new Stack<>(); // 存放排好序的数 Stack<Integer> sort...原创 2020-02-23 16:48:35 · 798 阅读 · 0 评论