LeetCode
泽阳Alex
热爱摄影,热爱生活
展开
-
【387】字符串中的第一个字符
题目(难度:简单):给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.代码思想:利用map结构,记录每个字符出现的次数,最后遍历map集合,取出现次数为1的元素代码实现: public int firstUniqChar(String...原创 2019-11-25 08:21:20 · 318 阅读 · 0 评论 -
【208】实现Trie(前缀树)
题目(难度:中等):实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.star...原创 2019-11-25 08:23:14 · 147 阅读 · 0 评论 -
【386】字典序排序
题目(难度:中等):给定一个整数n, 返回从1到n的字典顺序。例如,给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据n小于等于5,000,000。代码思想:字典序的思想是从数字的第一个字符比较,如果可以直接比较出前后,则输出结果;如果第一个字符相同,则比较第二...原创 2019-11-25 08:23:05 · 365 阅读 · 0 评论 -
【1252】奇数值的单元格的数目
题目(难度:简单):代码思想:单纯的暴力解决,需要注意的是区分indices的对行还是对列操作,这里是对行队列交替执行加1操作,用一个boolean类型的flag区分一下。代码实现:public int oddCells(int n, int m, int[][] indices) { int[][] array = new int[n][m]; ...原创 2019-11-25 08:22:57 · 243 阅读 · 0 评论 -
【200】岛屿数量
题目(难度:中等):给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:1示例2:输入:11000110000010000011输出: 3代码思想:利用病毒...原创 2019-11-25 08:22:49 · 139 阅读 · 0 评论 -
【1253】重构2行矩阵
题目(难度:中等):给你一个2行 n 列的二进制数组:矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是0就是1。第 0 行的元素之和为upper。第 1 行的元素之和为 lower。第 i 列(从 0 开始编号)的元素之和为colsum[i],colsum是一个长度为n的整数数组。你需要利用upper,lower和colsum来重构这个矩阵,并以二维整...原创 2019-11-25 08:22:39 · 222 阅读 · 0 评论 -
【1155】掷骰子的n种方法
题目(难度:中等):这里有d个一样的骰子,每个骰子上都有f个面,分别标号为1, 2, ..., f。我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。如果需要掷出的总点数为target,请你计算出有多少种不同的组合情况(所有的组合情况总共有 f^d 种),模10^9 + 7后返回。示例 1:输入:d = 1, f = 6, target = 3输出...原创 2019-11-25 08:22:33 · 1211 阅读 · 0 评论 -
【239】滑动窗口最大值
题目(难度:困难):给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。input:[2,3,4,2,6,2,5,1]output:[4,4,6,6,6,5]代码思想:由于窗口不断更新,不能一直以一个最大值作为比较器,来确定最大值。这里通过数组下标来...原创 2019-11-25 08:22:21 · 143 阅读 · 0 评论 -
【796】旋转字符串
题目(难度:简单):给定两个字符串, A和B。A的旋转操作就是将A 最左边的字符移动到最右边。例如, 若A = 'abcde',在移动一次之后结果就是'bcdea'。如果在若干次旋转操作之后,A能变成B,那么返回True。示例 1:输入: A = 'abcde', B = 'cdeab'输出: true示例 2:输入: A = 'abcde', B = 'ab...原创 2019-11-25 08:22:01 · 167 阅读 · 0 评论 -
【653】两数之和IV——输入BST
题目(难度:简单):给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:输入: 5 / \ 3 6/ \ \2 4 7Target = 9输出: True代码思想:利用二叉搜索树的特点,即中序遍历节点值升序的特点,将中序遍历的结果存储在list中(这里因为不知道...原创 2019-11-25 08:21:50 · 134 阅读 · 0 评论 -
【104】二叉树的最大深度
题目(难度:简单):给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。代码思想:利用递归,取当前节点左右子树的最大深度+1,...原创 2019-11-24 11:05:05 · 85 阅读 · 0 评论 -
【114】将二叉树展开为链表
题目(难度:中等):给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5/ \ \3 4 6将其展开为:1\ 2 \ 3 \ 4 \ 5 \ 6代码思想:核心问题是不允许创建新的链表存储树节点,而是在二叉...原创 2019-11-24 10:58:03 · 95 阅读 · 0 评论 -
【958】完全二叉树
题目(难度:中等):若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~2h个节点。)示例 1:输入:[1,2,3,4,5,6]输出:true代码思想:任何一个节点有右孩子没有左孩子,则返回false 如果左右孩子不全,即有左孩子无右孩子或者...原创 2019-11-24 10:48:16 · 145 阅读 · 0 评论 -
【110】平衡二叉树
题目(难度:中等):给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。代码思想:利用递归,递归结束条件:叶子节点...原创 2019-11-24 10:42:24 · 106 阅读 · 0 评论 -
【783】二叉搜索树节点最小距离
题目(难度:简单):给定一个二叉搜索树的根结点root, 返回树中任意两节点的差的最小值。示例:输入: root = [4,2,6,1,3,null,null]输出: 1解释:注意,root是树结点对象(TreeNode object),而不是数组。给定的树 [4,2,6,1,3,null,null] 可表示为下图: 4 / \...原创 2019-11-24 10:35:34 · 255 阅读 · 0 评论 -
【701】二叉搜索树的插入操作
题目(难度:中等):给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。给定二叉搜索树: 4 / \ 2 7 / \ 1 3和 插...原创 2019-11-24 10:29:08 · 302 阅读 · 0 评论 -
【538】把二叉搜索树转换为累加树
题目(难度:简单):给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 ...原创 2019-11-24 10:09:27 · 96 阅读 · 0 评论 -
【700】二叉搜索树中的搜索
题目(难度:简单):给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1...原创 2019-11-24 10:05:33 · 147 阅读 · 0 评论 -
【98】验证二叉搜索树
题目98(难度:中等):给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \...原创 2019-11-24 10:00:32 · 88 阅读 · 0 评论 -
【64】最小路径和
题目(难度:中等):给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。代码思想:利用动态规划,二维数组中每个元素存储的是走到当前节点的总...原创 2019-11-24 09:54:50 · 106 阅读 · 0 评论 -
【560】和为k的子数组
题目(难度:中等):给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。代码思想:代码实现: public int subarraySum(int[] nums, int k) { int len =...原创 2019-11-09 17:11:39 · 103 阅读 · 0 评论 -
【581】最短连续子数组
题目(难度:简单):给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。代码思想:试想,数组中存在零...原创 2019-11-09 17:08:16 · 373 阅读 · 0 评论 -
【572】另一个树的子树
题目(难度:简单):给定两个非空二叉树 s 和 t,检验s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。代码思想:分两步,第一步,先在父树中找到子树的根节点,再分别比较父树和子树的左孩子和右孩子,递归的终止条件是:如果父树节点和子树节点均为空,则是子树 如果两者其一为空,另一不为空,则...原创 2019-11-09 17:00:34 · 121 阅读 · 0 评论 -
【10】正则表达式匹配
题目(难度:困难):给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z的小写字母,以及字符.和*。示例 1:输入...原创 2019-11-09 16:23:14 · 187 阅读 · 0 评论 -
【153】寻找旋转排序数组中的最小数字
题目(难度:中等):假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1代码思想:除去临界值情况,正常有以下两种情况:数组没有发生旋转 数组发生了旋转根据题目...原创 2019-11-09 15:26:40 · 94 阅读 · 0 评论 -
【509】斐波那契数
题目(难度:简单):斐波那契数,通常用F(n) 表示,形成的序列称为斐波那契数列。该数列由0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定N,计算F(N)示例;输入:3输出:2解释:F(3) = F(2) + F(1) = 1 ...原创 2019-11-09 14:38:09 · 323 阅读 · 0 评论 -
【946】验证栈序列
题目(难度:中等):给定pushed和popped两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), ...原创 2019-11-09 14:22:33 · 1803 阅读 · 1 评论 -
【225】【232】栈和队列相互实现
题目【225】(难度:简单):用队列实现栈解题思想:队列的特点是先进先出,用两个队列相互数据转移,实现栈的先进后出。以pop为例,队列1先进栈,如果要实现出栈,则将队列1中的元素除了最后一个元素转移到队列2中,再将队列1中元素移除,实现出栈,下一步继续入栈,再从队列2转移到队列1.代码实现: Queue<Integer> queue1; Queue<Inte...原创 2019-11-09 14:11:48 · 123 阅读 · 0 评论 -
【102】【107】二叉树的层次遍历、二叉树的层次遍历II(已优化)
题目【102】(难度:中等):给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7],代码思想:利用队列FIFO的思想,将二叉树的节点放入队列中。初始化队列只包含一个根节点root和层次编号level=0;当队列非空时:在输出结果levels中插入一个空列表,开始当前层的算...原创 2019-10-21 20:14:32 · 171 阅读 · 0 评论 -
【125】验证回文串
【125】题目(难度:简单):给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false代码思想:(不适用系统自带方法)核心是排除非字母和...原创 2019-10-13 14:06:53 · 196 阅读 · 0 评论 -
【141】【142】环形链表(已优化)
【141】题目(难度:简单):给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1...原创 2019-10-13 11:26:18 · 138 阅读 · 0 评论 -
【121】【122】【123】买卖股票的最佳时机(已优化)
【121】题目(难度:简单):给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利...原创 2019-10-12 20:35:53 · 115 阅读 · 0 评论 -
【24】两两交换链表的节点(已优化)
题目(难度:中等):给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3解法思想:先创建一个空节点,其next指向head,然后利用node1、node2和next三个指针变量进行交换。代码实现...原创 2019-09-04 19:37:58 · 103 阅读 · 0 评论 -
【20】有效的括号(已优化)
题目(难度:简单):给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "{[]}"...原创 2019-09-03 20:43:06 · 210 阅读 · 1 评论 -
【19】删除链表的倒数第N个节点(已优化)
题目(难度:中等):给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.解法:在求出链表长度len之后,利用(len-n)从头开始遍历,删除指定节点。代码实现:package Mid...原创 2019-09-03 16:26:55 · 99 阅读 · 0 评论 -
【15】三数之和(已优化)
题目(难度:中等):给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]...原创 2019-09-02 19:06:24 · 199 阅读 · 0 评论 -
【9】回文数(已优化)
题目(难度:简单):判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true解法思想:不采用传统思想,即把 int数转换为字符串,再通过折半对比或倒序判断是否是回文数。通过除法和取余,将数字直接倒序,再与原数进行对比,返回结果。代码实现:public boolean isPalindrome(...原创 2019-08-29 16:33:07 · 268 阅读 · 0 评论 -
【3】无重复字符的最长字串(已优化)
题目(难度:中等):给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。解法思想:通过Map记录字符串里面每个字符是否出现过,以此为判断点,如果出现则在该字符断开,通过下标变量min和max记录子串长度,并不断更新maxlen,直至字符串长度等于len,结束循...原创 2019-09-13 15:40:26 · 142 阅读 · 0 评论 -
【2】两数相加(已优化)
题目(难度:中等):给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -&...原创 2019-08-27 11:19:17 · 187 阅读 · 0 评论 -
【26】【80】删除数组中的重复项 I、II(已优化)
题目26(难度:简单):给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度...原创 2019-09-11 16:31:03 · 234 阅读 · 0 评论