leetecode
斜月&三星
这个作者很懒,什么都没留下…
展开
-
leetcode-两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法1:暴力法遍历两遍数组public int[] twoSum(int[] n...原创 2018-11-06 17:19:12 · 56 阅读 · 0 评论 -
Z字形变换
将字符串"PAYPALISHIRING"以Z字形排列成给定的行数:P A H NA P L S I I GY I R之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"实现一个将字符串进行指定行数变换的函数比如有一个字符串 “0123456789ABCDEF”,转为zigzag当 n = 2 时:0 2 4 6 8 A C E1 ...原创 2018-11-09 15:56:14 · 80 阅读 · 0 评论 -
反转整数
给定一个 32 位有符号整数,将整数中的数字进行反转。示例1:输入: 123 输出: 321示例 2:输入: -123 输出: -321示例 3:输入: 120 输出: 21注意: 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31− 1]。根据这个假设,如果反转后的整数溢出,则返回 0。思路:我们可以一次构建...原创 2018-11-09 16:19:41 · 153 阅读 · 0 评论 -
字符串转整数(atoi)
实现atoi,将字符串转为整数。1.该函数首先根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。2.字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。3...原创 2018-11-09 17:13:41 · 97 阅读 · 0 评论 -
两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路我们使用变量来跟踪进位,并从包...原创 2018-11-07 09:21:57 · 80 阅读 · 0 评论 -
盛最多水的容器
给定n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容...原创 2018-11-10 09:05:57 · 81 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。输入: "pwwkew"输出: 3解释: 无重复字符的最长子串是 "wke",其长度为 3。请注意,答案必须是一个子串,"pwke"是一个子序列 而不是子串。思路:博主会一个字符一个字符的遍历,比如a,b,c,然后又出现了一个a,那么此时就应该去掉第一次出现的a,然后继续往后,又出现了一个b,则应该去掉一次出现的b,以此类推,最...原创 2018-11-07 14:27:15 · 83 阅读 · 0 评论 -
两个排序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。你可以假设 nums1 和 nums2 不同时为空。示例 1: nums1 = [1, 3] nums2 = [2] 中位数是 2.0示例 2: nums1 = [1, 2] nums2 = [3, 4] 中位数...原创 2018-11-07 17:08:56 · 247 阅读 · 0 评论 -
罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 Ⅰ...原创 2018-11-10 10:06:08 · 103 阅读 · 0 评论 -
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1: 输入: ["flower","flow","flight"] 输出: "fl"示例2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。说明: 所有输入只包含小写字母a原创 2018-11-10 15:13:37 · 80 阅读 · 0 评论 -
实现strStr()
实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2示例 2: 输入: haystack = "aaaaa", needle =...原创 2018-11-13 08:58:13 · 97 阅读 · 0 评论 -
两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。示例 1: 输入: dividend = 10, divisor = 3 输出: 3示例 2: 输入: dividend = 7, divisor = -3 输出: -2说明:被除数和除数均为 ...原创 2018-11-13 14:53:15 · 272 阅读 · 0 评论 -
下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3→1,3,23,2,1→1,2,31,1,5→1,5,1思路:有如下的一个数组1 5 8 4 7 6 5 ...原创 2018-11-13 15:36:43 · 73 阅读 · 0 评论 -
搜索旋转排序数组
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1: 输入: nums = [4,5,6,7,0,1,2], target = 0 输出: 4示例 2: 输入: nums = [4,5,6,7,0,1,2], target = 3 输出: -1思路:采...原创 2018-11-13 16:57:09 · 63 阅读 · 0 评论 -
三数之和
给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路: ...原创 2018-11-11 15:48:23 · 95 阅读 · 0 评论 -
最接近的三数之和
给定一个包括n个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思路: 这道题让我们...原创 2018-11-11 16:19:35 · 108 阅读 · 0 评论 -
四数之和
给定一个包含n个整数的数组nums和一个目标值target,判断nums中是否存在四个元素a,b,c和d,使得a+b+c+d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合...原创 2018-11-11 17:01:00 · 142 阅读 · 0 评论 -
移除链表倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.思路:双指针法 需要用两个指针来帮助我们解题,pre和cur指针。首先cur指针先向前走N步,如果此时cur指向空,说明N为链表的长...原创 2018-11-11 17:21:41 · 108 阅读 · 0 评论 -
有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1: 输入: "()" 输出: true示例 2: 输入: "()[]{}" 输出: true示例 3: 输入: "(]" ...原创 2018-11-11 19:33:09 · 147 阅读 · 0 评论 -
合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路: 具体思想就是新建一个链表,然后比较两个链表中的元素值,把较小的那个链到新链表中,由于两个输入链表的长度可能不同,所以最终会有一个链...原创 2018-11-11 19:45:00 · 111 阅读 · 0 评论 -
括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]思路: 这道题给定一个数字n,让生成共有n个括号的所有正确的形式,对于这种列出所有结果的题首先还是考虑用递归来解,由于字...原创 2018-11-11 20:02:56 · 228 阅读 · 0 评论 -
反转单链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLpublic ListNode reverseList(ListNode head) { if(head == null || head.next == null){ return n...原创 2018-11-15 18:58:12 · 89 阅读 · 0 评论 -
删除链表的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 -> 9示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应...原创 2018-11-15 19:06:27 · 69 阅读 · 0 评论 -
移除链表元素-203
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5public ListNode removeElements(ListNode head, int val) { if(head == null) return nul...原创 2018-11-15 19:13:09 · 96 阅读 · 0 评论 -
leetcode - 39 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1: 输入: candidates = [2,3,6,7], target = 7, 所求解集为...原创 2018-11-15 19:52:10 · 87 阅读 · 0 评论 -
leetcode-40 组合总和Ⅱ
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。 示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8, 所求解集为: ...原创 2018-11-15 20:21:05 · 165 阅读 · 0 评论 -
合并k个有序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6思路:分治法 简单来说就是不停的对半划分,比如k个链表先划分为合并两个k/2个链表的任务,再...原创 2018-11-12 10:14:19 · 955 阅读 · 0 评论 -
K个一组反转链表
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->...原创 2018-11-12 11:05:37 · 399 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个的位置
给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(logn) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4]示例2: 输入: nums = [5,7,7,8,8,10], ...原创 2018-11-14 10:06:13 · 139 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1: 输入: [1,3,5,6], 5 输出: 2示例2: 输入: [1,3,5,6], 2 输出: 1示例 3: 输入: [1,3,5,6], 7 输出: 4示例 4: 输入: [1,3,5,6], 0 输出: 0解...原创 2018-11-14 10:35:27 · 66 阅读 · 0 评论 -
有效的数独
判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。思路:依次检查每行,每列,每个子九宫格是否出现重复元素,如果出现...原创 2018-11-14 11:01:34 · 165 阅读 · 0 评论 -
count and say
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211被读作"one 1"("一个一") , 即11。11被读作"two 1s"("两个一"), 即21。21被读作"one 2", "one 1"("一个二","原创 2018-11-14 16:02:25 · 70 阅读 · 0 评论 -
删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例2:给定 nu...原创 2018-11-12 21:10:18 · 65 阅读 · 0 评论 -
移除元素
给定一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nu...原创 2018-11-12 21:29:16 · 46 阅读 · 0 评论 -
leetcode41-缺失的第一个整数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例1: 输入: [1,2,0] 输出: 3示例2: 输入: [3,4,-1,1] 输出: 2示例3: 输入: [7,8,9,11,12] 输出: 1说明: 你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。思路:解法一:使用HashSet 第一遍遍历数组把所有的数都存入...原创 2018-11-16 11:36:32 · 185 阅读 · 0 评论 -
leetcode141 - 判断链表是否有环
给定一个链表,判断链表中是否有环。思路:双指针法 定义快慢指针,慢指针一次走一步,快指针一次走两步,若快指针走到末尾还没有遇见慢指针,则链表没有环。public boolean hasCycle(ListNode head) { if(head == null || head.next == null) return null; ListNode ...原创 2018-11-20 19:37:05 · 67 阅读 · 0 评论 -
leetcode 142 环形链表Ⅱ
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。思路: 首先通过快慢指针的方法判断链表是否有环;接下来如果有环,则寻找入环的第一个节点。具体的方法为,首先假定链表起点到入环的第一个节点A的长度为a【未知】,到快慢指针相遇的节点B的长度为(a + b)【这个长度是已知的】。现在我们想知道a的值,注意到快指针p2始终是慢指...原创 2018-11-20 20:11:46 · 103 阅读 · 0 评论 -
leetcode56 合并区间
给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。...原创 2018-11-20 20:35:22 · 79 阅读 · 0 评论 -
leetcode 101 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [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思路: 如果同时满足下面的条件,两...原创 2018-11-20 22:02:57 · 76 阅读 · 0 评论 -
leetcode 74 - 搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true示例 2:输...原创 2018-11-21 09:00:47 · 76 阅读 · 0 评论