LeetCode209—长度最小的子数组(java版)

题目描述:标签:数组 双指针 二分查找给定一个含有n个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。代码:思路分析:双指针的思想1、定义子数组开始指针begin、结束指针end,初始都指向数组第一个元素。2、每次循环都加nums[end],并判断此时的和是否大于target...
分类: 其他 发布时间: 03-26 10:38 阅读次数: 0

LeetCode141—环形链表(java版)

题目描述:标签:数组 双指针给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。代码:思路分析:这里的双指针指的是快慢指针。1、先解...
分类: 其他 发布时间: 03-26 10:38 阅读次数: 0

LeetCode142—环形链表Ⅱ(java版)

题目描述:标签:数组 双指针给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。代码:思路分析:这里最重要的是在判断有没有环的情况下加入了数学推导,这真的太难了。这里借鉴数学推导把,因为判断有环的思路和环形...
分类: 其他 发布时间: 03-26 10:38 阅读次数: 0

LeetCode203—移除链表元素(java版)

题目描述:标签:链表删除链表中等于给定值val的所有节点。代码:思路分析:哨兵节点,伪头结点1、定义一个哨兵节点sentinel,值为0,next指向head;2、定义一个前驱指针prev和当前指针cur,让prev指向哨兵节点,cur指向头结点,遍历链表有下面两种情况:如果cur.val = val,删除结点,即prev.next = cur.next;否则,让前驱结点后移 pre = cur同时 cur = cur.next/** * Defi...
分类: 其他 发布时间: 03-26 10:38 阅读次数: 0

LeetCode206—反转链表(java版)

题目描述:标签:链表反转一个单链表。代码:思路分析:我的思路和官方不太一样,我是新建了一个链表,然后通过头插法实现了反转。1、新建一个链表reverse2、遍历给的链表,两种情况:如果reverse.next为空的话,则直接插入元素reverse.next=node否则,需要头插元素,即node.next=reverse.next和reverse.next=node。官方给的迭代就是需要定义一个前驱结点。递归我没看懂。/** * Definition...
分类: 其他 发布时间: 03-26 10:37 阅读次数: 0

LeetCode707—设计链表(java版)

题目描述:标签:设计 链表设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性prev以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第index个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为v...
分类: 其他 发布时间: 03-26 10:37 阅读次数: 0

LeetCode20—有效的括号 (java版)

题目描述:标签:栈 字符串给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。代码:思路分析:1、特殊分析:括号成双成对,字符串长度一定为偶数,所以长度为奇数的字符串一定不是有效括号字符串。2、建一个栈,遇到左括号时压入栈中,遇到右括号时,判断此时栈是不是空或者栈顶的括号是否配对,如果真则返回false,如果假则将栈顶的元素弹出与当前右括...
分类: 其他 发布时间: 03-26 10:37 阅读次数: 0

LeetCode150—逆波兰表达式求值 (java版)

题目描述:标签:栈根据 逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况代码:思路分析:逆波兰表达式求值1、建一个栈。2、利用增强for循环遍历,如果当前字符为数字,则压入栈中;如果当前字符为“+、-、* 、/”运算符,则弹出两个元素进行运算,并将运算结果压入栈中。3、...
分类: 其他 发布时间: 03-26 10:37 阅读次数: 0

LeetCode225—用队列实现栈 (java版)

题目描述:标签:栈设计请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是push to back、peek/...
分类: 其他 发布时间: 03-26 10:36 阅读次数: 0

LeetCode232—用栈实现队列(java版)

题目描述:标签:栈 设计请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有push to top,pee...
分类: 其他 发布时间: 03-26 10:36 阅读次数: 0

LeetCode1047—删除字符串中的所有相邻重复项(java版)

题目描述:标签:栈给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。代码:思路分析:想到用栈解决,每个元素压入前都与栈顶的元素比较,如果相同就可以消除。但这里不是直接造一个栈对象,是用stringbuffer stack实现了栈,定义一个指向栈顶的指针top。获取栈顶的元素用的是stack.charAt(top)删除...
分类: 其他 发布时间: 03-26 10:36 阅读次数: 0

LeetCode101—对称二叉树(java版)

题目描述:标签:树 深度优先搜索 广度优先搜索给定一个二叉树,检查它是否是镜像对称的。代码:思路分析:1、想到了定义两个指针p、q,同时从根节点往左子树(p) 和 右子树移动(q) ,要想镜像对称,应该要满足p的左子树值=q的右子树值。2、这里因为用的是递归的解法,所以要注意的是递归结束的条件。 ①如果p和q都为null,说明两者在该位置是对称的,返回true ②如果p和q有一个为null一个有值,说明两者在该位置是不对称的,返回false3、...
分类: 其他 发布时间: 03-26 10:36 阅读次数: 0

LeetCode104—二叉树的最大深度(java版)

题目描述:标签:树 深度优先搜索 递归给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。代码:思路分析:1、其实就是需要找到左子树的高度leftHeight 和 右子树的高度rightHeight ,然后取两个高度的最大值 + 1即为二叉树的最大深度2、利用递归,递归结束的条件就是null。返回0。/** * Definition for a binary tree node....
分类: 其他 发布时间: 03-26 10:35 阅读次数: 0

LeetCode111—二叉树的最小深度(java版)

题目描述:标签:树 深度优先搜索 广度优先搜索给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。代码:思路分析:1、想法和求二叉树的最大深度一样。即找到左子树高度leftHeight 和 右子树高度rightHeight ,取两者最小值 + 1即为最小深度。2、但有两种特殊情况需要处理,那就是一棵树只有左子树或者右子树的情况,此时leftHeight或者rightHeight=0,如果取最...
分类: 其他 发布时间: 03-26 10:35 阅读次数: 0

LeetCode94—二叉树的中序遍历(java版)

题目描述:标签:栈 树 哈希表给定一个二叉树的根节点root,返回它的中序遍历。代码:思路分析:1、这和自己学数据结构与算法的时候不一样的点就是题目需要返回一个list。所以这里传参需要传入链表list。2、单独写中序遍历的方法。递归结束的判断是遇到null。若不是,则先遍历左子树-根-右子树。/** * Definition for a binary tree node. * public class TreeNode { * int ...
分类: 其他 发布时间: 03-26 10:35 阅读次数: 0

LeetCode144—二叉树的前序遍历(java版)

题目描述:标签:栈 树给你二叉树的根节点root,返回它节点值的前序遍历。代码:思路分析:前序遍历是根-左子树-右子树。思路同二叉树的中序遍历/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeN...
分类: 其他 发布时间: 03-26 10:35 阅读次数: 0

LeetCode145—二叉树的后序遍历(java版)

题目描述:标签:栈 树给定一个二叉树,返回它的后序遍历。代码:思路分析:后序遍历是左子树-右子树-根。思路同二叉树的中序遍历。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int va...
分类: 其他 发布时间: 03-26 10:34 阅读次数: 0

LeetCode102—二叉树的层序遍历 (java版)

题目描述:标签:树 广度优先搜索给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。代码:思路分析:1、首先最重要的是使用队列+广度优先搜索来实现层序遍历操作。2、把根节点加入队列,对应此时的层数。以此时队列的长度为循环终止条件开始循环:取队列节点的值加入当层的list,并把该节点的左右节点加入队列。其实每层即对应一次大循环此时队列里的节点个数。/** * Definition for a binary tree node...
分类: 其他 发布时间: 03-26 10:34 阅读次数: 0

LeetCode107—二叉树的层序遍历Ⅱ(java版)

题目描述:标签:树 广度优先搜索给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)代码:思路分析:思路同二叉树的层序遍历,不过需要使用list的头插方法list.add(0,res),即在索引为0的位置插入元素,即头插。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode..
分类: 其他 发布时间: 03-26 10:34 阅读次数: 0

LeetCode199—二叉树的右视图(java版)

题目描述:标签:树 深度优先搜索 广度优先搜索 递归 队列给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。代码:思路分析:思路分析同二叉树的层序遍历。改进的地方在于每层遍历时只保留最后一个节点的值加入链表中。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...
分类: 其他 发布时间: 03-26 10:34 阅读次数: 0