领扣top100
小小核桃
这个作者很懒,什么都没留下…
展开
-
5.最长回文字串---动态规划
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"1.暴力法 public String longestPalindrome(String s) { String ans =...转载 2019-06-19 20:19:00 · 431 阅读 · 0 评论 -
21. 合并两个有序链表---链表,递归
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路 标签:链表、递归 这道题可以使用递归实现,新链表也不需要构造新节点,我们下面列举递归三个要素 终止条件:两条链表分别名为...转载 2019-06-22 16:10:22 · 210 阅读 · 0 评论 -
22. 括号生成---回溯法
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]回溯法在生成全集的过程中进行剪枝,使得效率最大。并且不需要判重,因为回溯就是一次性生成全集,所以不会重复。剪枝需要用到两个变量,一个是当前...转载 2019-06-22 17:06:45 · 327 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置---二分法
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10]...转载 2019-06-26 16:44:52 · 296 阅读 · 0 评论 -
39. 组合总和---回溯算法
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,...转载 2019-06-26 19:55:26 · 338 阅读 · 0 评论 -
40. 组合总和 II---回溯算法
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明: 所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target ...转载 2019-06-26 20:35:36 · 200 阅读 · 0 评论 -
53. 最大子序和---动态规划
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路: 动态规划的是首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 res 如果 sum > 0,则说明 su...转载 2019-07-02 21:15:20 · 138 阅读 · 0 评论 -
54. 螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出:...转载 2019-07-02 21:42:06 · 226 阅读 · 0 评论 -
24. 两两交换链表中的节点---递归
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.思路 标签:链表 本题的递归和非递归解法其实原理类似,都是更新每两个点的链表形态完成整个链表的调整 其中递归解法可以作为...转载 2019-06-24 21:23:45 · 451 阅读 · 0 评论 -
42. 接雨水---双指针
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路:一个简单的思路就是...转载 2019-06-27 21:22:09 · 569 阅读 · 1 评论 -
25. K 个一组翻转链表---链表,递归
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->...转载 2019-06-24 21:53:18 · 604 阅读 · 0 评论 -
43. 字符串相乘---数学
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明: num1 和 num2 的长度小于110。 num1 ...转载 2019-06-27 21:44:21 · 116 阅读 · 0 评论 -
46. 全排列---回溯算法
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]class Solution { public List<List<Integer>> permute(int[] ...转载 2019-06-28 15:04:15 · 695 阅读 · 0 评论 -
48. 旋转图像---数组
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]...转载 2019-06-28 16:13:22 · 134 阅读 · 0 评论 -
20. 有效的括号---栈
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: fal...转载 2019-06-22 15:42:35 · 119 阅读 · 0 评论 -
33. 搜索旋转排序数组---二分查找法
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2]...转载 2019-06-25 21:01:13 · 178 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点---链表,双指针
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。思路 标签:链表 整体思路是让前面的指针先移动n步,之后前后指针共同移动直到前面的指针到尾...转载 2019-06-22 11:29:10 · 208 阅读 · 0 评论 -
6.Z字形变换---字符串
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函...转载 2019-06-19 20:47:55 · 219 阅读 · 0 评论 -
7.整数反转---数学
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2的31次方, 2的31次方 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0...转载 2019-06-19 21:01:52 · 284 阅读 · 0 评论 -
10. 正则表达式匹配--回溯法
给定一个字符串 (s) 和一个字符模式 (p)。实现支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符。 ‘*’ 匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s) ,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = ...转载 2019-06-20 18:44:45 · 357 阅读 · 0 评论 -
11. 盛最多水的容器---数组,双指针
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容...转载 2019-06-20 19:09:17 · 114 阅读 · 0 评论 -
12. 整数转罗马数字---数字,字符串
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。...转载 2019-06-20 19:50:17 · 166 阅读 · 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]]时间复杂度O(...原创 2019-06-21 20:31:47 · 171 阅读 · 0 评论 -
16. 最接近的三数之和---双指针
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).解题方案思路 标签:排...转载 2019-06-21 20:43:29 · 362 阅读 · 0 评论 -
17. 电话号码的字母组合---递归
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].public class ABCTest { private String[] map = {...转载 2019-06-21 21:02:11 · 183 阅读 · 0 评论 -
31. 下一个排列--数组
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1思路:从右向左,找到i,满足a[i]...原创 2019-06-25 17:18:01 · 134 阅读 · 0 评论 -
1.两数之和--数组,哈希表
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路...转载 2019-06-18 09:04:16 · 165 阅读 · 0 评论 -
32. 最长有效括号--栈,动态规划
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"方法1:动态规划这个问题可以通过动态规划解决。我们定义一个 dp 数组,其中第 i个元素表示以下标为 i的字符结尾的最长有...转载 2019-06-25 20:12:07 · 380 阅读 · 0 评论 -
2.两数相加--链表
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> ...转载 2019-06-18 09:54:39 · 204 阅读 · 0 评论 -
3.无重复字符的最长子串--哈希表,双指针,滑动窗口
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "...原创 2019-06-18 10:55:38 · 362 阅读 · 0 评论 -
49. 字母异位词分组---哈希表
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明: 所有输入均为小写字母。 不考虑答案输出的顺序。...转载 2019-06-28 17:14:11 · 150 阅读 · 0 评论