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 · 1650 阅读 · 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 · 142 阅读 · 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 · 104 阅读 · 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 · 141 阅读 · 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 · 116 阅读 · 0 评论 -
剑指offer 2 替换空格
替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。分析:将一个字符替换为三个字符,字符串的长度增加,所以需要移动字符,在 java 中也可以使用 StringBuilder 进行拼接,但是需要额外的空间,在原字符串上进行移动,扩容的空间较少,这里对第二种进行分析字符串的遍历有俩种从左往右:替换一个字符后会覆盖原来的字符从右往左:如果是空格就替换字符,不是空格就直接移动源原创 2020-07-22 16:06:43 · 98 阅读 · 0 评论 -
剑指offer 1 二维数组中的查找
二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析: 首先,对于查找,我们最先能想到的就是遍历数组,挨个进行比较,但是效率是非常低的,最坏的时间复杂度是 O(n2),所以我们必须去优化它。**查找其实也就是排除的过程,只要排除的越多,说明效率越高,**像挨个遍历,每一次只能排除一个,所以效率低,题目中的二维数组是有规律的,例如要在下面的原创 2020-07-22 16:05:36 · 151 阅读 · 1 评论 -
和为 s 的连续正数序列
和为 s 的连续正数序列 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 /** * 双指针,滑动窗口 * * target = 9 * * 左指针 left = 0,右指针 right = 1; * sum = 3...原创 2020-03-06 21:46:18 · 151 阅读 · 0 评论 -
和为 s 的俩个数
和为 s 的俩个数 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。穷举法 /** * 穷举法 */ public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; ...原创 2020-03-06 21:45:29 · 109 阅读 · 0 评论 -
给定一个二叉树,检查它是否是镜像对称的。
一、题目描述给定一个二叉树,检查它是否是镜像对称的。二、分析满足镜像对称的条件:必须是俩个结点(t1,t2);t1,t2的值必须相等;t1的左结点和t2的右结点必须同时为空或者同时有值;t2的右结点和t1的左结点必须同时为空或者同时有值;三、解法1.使用递归public boolean isSymmetric(TreeNode root) { return ...原创 2020-03-06 17:28:51 · 414 阅读 · 0 评论 -
根据前序遍历和中序遍历还原二叉树
一、题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二、分析由前序遍历的定义可以知道,数组中的每一个值都是当前子树的根结点,根据根结点在中序遍历中的位置,我们可以将这颗树分为左右俩个子树,分别在对...原创 2020-03-05 21:18:03 · 568 阅读 · 0 评论 -
使用俩个栈实现排序
使用俩个栈实现排序public ArrayList<Integer> twoStacksSort(int[] numbers) { // 存放所有的数 Stack<Integer> initStack = new Stack<>(); // 存放排好序的数 Stack<Integer> sort...原创 2020-02-23 16:48:35 · 834 阅读 · 0 评论