LeetCode
从一点一滴做起
这个作者很懒,什么都没留下…
展开
-
leetcode:最小栈(java,考察点:如何对最小值赋值)
题目设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.pu...原创 2019-04-12 16:46:09 · 180 阅读 · 0 评论 -
leetcode:合并两个有序数组(java,考察点:数组循环遍历)
题目给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3num...原创 2019-04-09 14:46:12 · 196 阅读 · 0 评论 -
leetcode:将有序数组转换为二叉搜索树(java,考察点:二分法)
题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /...原创 2019-04-09 13:58:11 · 129 阅读 · 0 评论 -
leetcode: 二叉树的层次遍历(java,考察点:递归调用)
题目给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]思路广度优先遍历,添加层数,每次计算一层,递归调用java...原创 2019-04-09 11:27:41 · 1211 阅读 · 0 评论 -
leetcode:Shuffle an Array(java,考察点:概率的计算)
题目打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。int[] nums = {1,2,3};Solution solution = new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。solution.shuffle();// 重设数组到它的初始状态[1,2,...原创 2019-04-12 15:48:03 · 249 阅读 · 0 评论 -
leetcode:对称二叉树(java,考察点:递归)
题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和迭代两种方法解决...原创 2019-04-09 10:01:11 · 218 阅读 · 0 评论 -
leetcode:字谜分组(java,考察点:字符存储)
题目给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。思路将字符串进...原创 2019-04-15 19:35:29 · 170 阅读 · 0 评论 -
leetcode:最大子序和(java,考察点:动态规划)
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。思路做了几道题,对动态规划的理解是,找出一条线(这条...原创 2019-04-12 14:31:21 · 664 阅读 · 0 评论 -
leetcode:矩阵置零(java,考察点:零元素如何存储)
题目给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: [ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5]...原创 2019-04-15 17:29:41 · 283 阅读 · 0 评论 -
leetcode:打家劫舍(java,考察点:动态规划)
题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,...原创 2019-04-12 10:29:49 · 300 阅读 · 0 评论 -
leetcode:验证二叉搜索树(java,考察点:二叉搜索树BST性质)
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 ...原创 2019-04-08 19:42:36 · 310 阅读 · 0 评论 -
leetcode:二叉树的最大深度(java,考察点:左子树和右子数)
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。思路左右子树中较大的一个加1java/** * Defin...原创 2019-04-08 18:51:28 · 484 阅读 · 0 评论 -
leetcode:帕斯卡三角形(java,考察点:二维数组、list)
题目给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]思路创建一个二维数组,每一层的计算结果存储在二位数组中 将二维数组添加到一个list中jav...原创 2019-04-08 15:22:45 · 236 阅读 · 0 评论 -
leetcode:环形链表(java,考察点:快慢指针)
题目思路利用快慢指正,快的走两步,慢的走一步。如果存在环形链表,快指针就能追上慢指针。java/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x...原创 2019-04-08 14:43:19 · 235 阅读 · 0 评论 -
leetcode:回文链表(java,考察点:单向链表的遍历)
题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路创建一个数据或者栈来存储链表中的所有值,通过首尾的匹配来判断是否回文 将链表一分为2,将其中一个反转,遍历是否相等java创建...原创 2019-04-08 13:54:52 · 328 阅读 · 0 评论 -
leetcode:反转链表(java)
题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?java/** * Definition for singly-linked list. * public class Lis...原创 2019-04-12 17:13:14 · 704 阅读 · 0 评论 -
leetcode:存在重复(java)
题目给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: truejavaclass Solu...原创 2019-04-12 17:19:02 · 309 阅读 · 0 评论 -
leetcode:电话号码的字母组合(java,考察点:回溯的思想)
题目给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。思路根据输入...原创 2019-05-05 19:15:38 · 399 阅读 · 0 评论 -
leetcode:生成括号(java,考察点:回溯)
题目给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]思路没有搞明白,先写了在慢慢看javaclass Solution { public List<Str...原创 2019-05-08 14:49:48 · 209 阅读 · 0 评论 -
leetcode:岛屿的个数(java,考察点:深度优先遍历)
题目给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3思路深度优先遍历,遍历二维数组,...原创 2019-05-05 14:27:49 · 693 阅读 · 0 评论 -
leetcode:二叉搜索树中第K小的元素(java,考察点:中序遍历)
题目给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1示例 2:输入: root = [5,3,6,2,4,null,nul...原创 2019-05-05 10:52:38 · 728 阅读 · 0 评论 -
leetcode:填充每个节点的下一个右侧节点指针(java,考察点:层序遍历)
题目思路层序遍历,将每层的最右边的下一个节点赋值为null 将上一个节点指向下一个节点java/*// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node next; public N...原创 2019-04-29 15:24:26 · 269 阅读 · 0 评论 -
leetcode:从前序与中序遍历序列构造二叉树(java,考察点:构造二叉树)
题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7思路前序遍历:每一个节点都是根节点 中序遍历:根节点左边的为...原创 2019-04-29 14:27:16 · 757 阅读 · 2 评论 -
leetcode:二叉树的锯齿形层次遍历(java,考察点:层序遍历)
题目给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]思路层序遍历思路,偶...原创 2019-04-29 11:21:57 · 585 阅读 · 0 评论 -
leetcode:三数之和(java,考察点:双指针)
题目三数之和给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思...原创 2019-04-15 14:45:03 · 440 阅读 · 0 评论 -
leetcode:两数相加(java,考察点:数字取整、取余)
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 ->...原创 2019-04-17 19:25:26 · 387 阅读 · 0 评论 -
leetcode:中序遍历二叉树(java,考察点:树的遍历)
题目给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?思路中序遍历:左根右。前序遍历:根左右;后序遍历:左右根。 创建一个栈,将根节点和左节点依次入栈 当左节点空时,进行出栈,添加到链表中。此时左节点在前,根节点在...原创 2019-04-26 16:23:58 · 486 阅读 · 0 评论 -
leetcode:相交链表(java,考察点:交点的寻找)
题目思路如果两个链表相交,则交点比在较短的链表的其中一个节点上 遍历两个链表计算两个链表的长度,相减计算长度的差值 较长的链表先走差值的长度 同时遍历两个链表,比较两个链表的值,相等则相交java/** * Definition for singly-linked list. * public class ListNode { * int val; * ...原创 2019-04-22 16:05:11 · 571 阅读 · 0 评论 -
leetcode:奇偶链表(java,考察点:链表的奇偶节点判断)
题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5-...原创 2019-04-22 14:50:53 · 639 阅读 · 0 评论 -
leetcode:递增的三元子序列(java,考察点:对题意多理解)
题目给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:...原创 2019-04-17 10:14:37 · 251 阅读 · 0 评论 -
leetcode:最长回文子串(java,考察点:算法优化)
题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路在解决一道算法问题时,首先不能忽视暴力解法,因为暴力解法是它最根本的计算逻辑。 在暴力解法的基础上利用时间换空间或者空间换时间等解法进...原创 2019-04-16 19:27:22 · 423 阅读 · 0 评论 -
leetcode:无重复字符的最长子串(java,考察点:滑动窗口)
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子...原创 2019-04-16 10:25:22 · 567 阅读 · 0 评论 -
leetcode:合并两个有序链表(java,考察点:链表递归)
题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路 递归求解,每次返回头指针java/** * Definition for singly-linked list. * ...原创 2019-04-08 10:50:32 · 197 阅读 · 0 评论 -
leetcode:买卖股票的最佳时机(java,考察点:动态规划?)
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 ...原创 2019-04-11 14:55:49 · 660 阅读 · 0 评论 -
leetcode:有效的数独(scala,考察点HashSet)
题目有效的数独判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。示例1:输入:[ ["5","3"...原创 2019-03-18 14:26:48 · 154 阅读 · 0 评论 -
leetcode:删除链表的倒数第N个节点(scala,考察点:双指针)
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路链表的题目,首先想到双指针 cur指针循环n次,如...原创 2019-03-25 13:56:39 · 210 阅读 · 0 评论 -
leetcode:报数(scala,考察点:字符串的拼接)
题目报数报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1" ("一个二"...原创 2019-03-21 16:28:41 · 485 阅读 · 0 评论 -
leetcode:实现strStr()(scala,考察点:字符串的比较)
题目实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", need...原创 2019-03-21 14:30:46 · 170 阅读 · 0 评论 -
leetcode: 字符串转换整数 (atoi)(scala,考察点:字符串的过滤)
题目请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,...原创 2019-03-21 10:46:46 · 193 阅读 · 0 评论 -
leetcode:两个数组的交集 II (scala)
题目给定两个数组,编写一个函数来计算它们的交集。输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果nums1的大小比nums2小很多,哪种方法更优? 如果nums2的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?思路将一...原创 2019-03-12 19:13:27 · 523 阅读 · 0 评论