每日一题
didihan
这个作者很懒,什么都没留下…
展开
-
面试题 02.08. 环路检测
给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tail connects to node index 0解释:链表中有一个环,其尾部连接到第原创 2020-08-20 20:41:18 · 131 阅读 · 0 评论 -
面试题 02.07. 链表相交
给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如原创 2020-08-20 19:57:43 · 119 阅读 · 0 评论 -
面试题 02.06. 回文链表
编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?这题看起来挺简单的,我也直接打完了,打完了了发现就是他链表中的数字不是一个个位数,而是随机数,所以不能单单的用数字去累加,根本行不通,只能够将链表一个个对比得出是否是回文的。单个数字的代码如下:/** * Definition for singly-li原创 2020-08-18 16:55:01 · 90 阅读 · 0 评论 -
面试题 02.05. 链表求和
给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:假设这些数位是正向存放的,请再做一遍。示例:输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295输出:9 -> 1原创 2020-08-17 19:42:19 · 151 阅读 · 0 评论 -
面试题 02.04. 分割链表
编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8这几题的题目描述是真的蠢,看都看不懂,大致的意思我是懂的但是这个实例一出来就原创 2020-08-16 17:45:54 · 85 阅读 · 0 评论 -
面试题 02.03. 删除中间节点
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f题目看来半天不知道是啥意思,因为在代码处只有一个输入,根本不知道题意,只知道删除,也不知道删除哪一个节点,看了看才知道,就是把给你的那个节点给删了,那就非常简单了直接指向下一个就好了,也没有什么难度。代码如下: * Definit原创 2020-08-16 17:27:05 · 258 阅读 · 0 评论 -
面试题 02.01. 移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?这题的关键在于不使用临时的缓冲区,使用暴力法是可以解决的代码如下:class Solution { public ListNode removeDuplic原创 2020-08-03 16:24:31 · 211 阅读 · 0 评论 -
面试题 01.09. 字符串轮转
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1:输入:s1 = “waterbottle”, s2 = “erbottlewat”输出:True示例2:输入:s1 = “aa”, s2 = “aba”输出:False题意还是很简洁的,就是看两个字符串是否只通过旋转而成的,方法还是挺简单的,把s2复制一遍放在s2的后面看看是否有s1就好了,代码也很简单代码如下:class Solutio原创 2020-08-03 16:02:54 · 75 阅读 · 0 评论 -
面试题 01.08. 零矩阵
编写一种算法,若M × N矩阵中某个元素为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]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]题意就是遇到0,行和列皆为0,如果直接在原数列上操作可能会把同行同列的0给遗漏掉,所以就直接上了最笨的方法暴力法,创一个原创 2020-08-03 15:56:25 · 153 阅读 · 0 评论 -
面试题 01.07. 旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],[15,14,12,16]],原地旋转输入矩阵原创 2020-08-02 14:27:27 · 170 阅读 · 0 评论 -
面试题 01.06. 字符串压缩(关于String和StringBuilder)
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1:输入:“aabcccccaaa”输出:“a2b1c5a3”示例2:输入:“abbccd”输出:“abbccd”解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。提示:字符串长度在[0, 50000]范围内。题意十分的清晰,看看实原创 2020-07-31 15:42:42 · 148 阅读 · 0 评论 -
面试题 01.05. 一次编辑
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。示例 1:输入:first = “pale”second = “ple”输出: True示例 2:输入:first = “pales”second = “pal”输出: False简单的看一下就是对删除插入和替换的判断而已,也就是对三种状态的分析,挺简单的,代码如下:class Solution { public boolean oneEdi原创 2020-07-31 14:44:15 · 85 阅读 · 0 评论 -
面试题 01.03. URL化
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)示例1:输入:“Mr John Smith “, 13输出:“Mr%20John%20Smith”示例2:输入:” “, 5输出:”%20%20%20%20%20”提示:字符串长度在[0, 500000]范围内。题意呢就是把空格改成%20,至于最后的空格是留出原创 2020-07-29 16:26:27 · 141 阅读 · 0 评论 -
面试题 01.02. 判定是否互为字符重排
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。示例 1:输入: s1 = “abc”, s2 = “bca”输出: true示例 2:输入: s1 = “abc”, s2 = “bad”输出: false说明:0 <= len(s1) <= 1000 <= len(s2) <= 100题意呢就是判断s1和s2中的字符数量是否相同,只要创建一个数组记录他们的数量就好了,s1++,s2–;最后判断数组是否都为原创 2020-07-29 15:55:53 · 101 阅读 · 0 评论 -
面试题 01.01. 判定字符是否唯一(包括一些逻辑运算)
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = “leetcode”输出: false示例 2:输入: s = “abc”输出: true限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。这题的题意就是判断是否有重复的字符,单单按照这个去做的话确实很简单,但是他说如果不使用额外的数据结构会很加分,那我们就要去从不用额外的数据结构的方向去做了,实在是是想不出什么好的方法了,不创的话就只有暴力法,还有我脑子里的交换原创 2020-07-29 15:31:21 · 189 阅读 · 0 评论 -
9. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?这题还有一个进阶,其实从这个进阶就知道了可以用转换字符串的方法去完成这一题了,原创 2020-07-28 15:50:40 · 90 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整数字原创 2020-07-28 15:35:31 · 110 阅读 · 0 评论 -
7. 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。逆向输出,也就是整除后在除一下,一个循环就做完了,如果就这样那就上当了,我就是没看完题目,还有一个注意,反转之后数字可能超模,超模后为0,这就涉原创 2020-07-28 14:18:42 · 105 阅读 · 0 评论 -
6. Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s = “LEET原创 2020-07-28 13:49:36 · 69 阅读 · 0 评论 -
5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: "bb"暴力法很轻松就可以做完,从首个字符开始判断,定义指针从s.length()处开始向左移动判断,但是这就违背的初心,我在暴力法上改良了一下,由字符开始向两边扩散的寻找,这样就减少了一些运算量但是时间复杂度还是一样的,至于我的代码有点乱和长,而且我在官方的解析处看到了相同思路的原创 2020-07-26 15:47:36 · 65 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数
给定两个大小为 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]则中位数是 (2 + 3)/2 = 2.5这题的主要难点在与时间复杂度,如果没有时间复杂度上的要去,做题十分简单,只要定义两原创 2020-07-26 14:32:10 · 71 阅读 · 0 评论 -
3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。暴力法解决肯定很原创 2020-07-25 15:19:18 · 73 阅读 · 0 评论 -
2.两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807这是一道链表的题目,这个可折磨死我了,思路倒是挺简单的,就是小问题一堆,本来是想原创 2020-07-23 16:10:33 · 85 阅读 · 0 评论 -
1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]很明显的滑动窗口做的,应该说是经典题目吧,就是下标要注意,因为返回的不是值还是下标,我是复制了一边这个数组找到值之后去复制的数组内寻找的,占用的空间原创 2020-07-23 14:27:40 · 48 阅读 · 0 评论 -
16.最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。正常人的思路就是滑动窗口吧,我反正就是这个思路,先固定一个数字,剩下的两个数字利用滑动窗口来寻找,感觉和寻找目标值是一样的就是这个是最接近的数字多了一个和值的比较而已原创 2020-07-23 13:30:46 · 172 阅读 · 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] ]一般这种找值的都是滑动窗口解决的(我认为奥),而滑动窗口要建立在排序的基础上,代入了一下滑动窗口的思维确实可以解答,比如上述的例题,先.原创 2020-07-05 10:36:17 · 80 阅读 · 0 评论 -
14.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。首先看这题没想到什么特殊的方法去解决,就是一个个字符进行匹配,看了官方的解析就是我的方法是纵向扫描,也就是最普通的方法了,还有一种类似的横向扫描就是从左到右,这个我倒是也想到了,但是没打就打了从上向下的方法一:纵向扫原创 2020-07-23 13:32:27 · 62 阅读 · 0 评论 -
13.逆转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况原创 2020-07-23 13:32:55 · 127 阅读 · 0 评论 -
12.旋转罗马数字
题目12.旋转罗马数字罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V原创 2020-07-23 13:33:06 · 218 阅读 · 0 评论 -
11.盛最多水的容器
第11题,盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。方法1,首先想到的肯定是暴力算法也是最简单的,两个for就搞定了也不敲代码了方法2,一种暴力算法的改良版,但也是for套for,我用的是类似期望的想法。 因为柱子i如果要得到他的最大面原创 2020-07-23 13:33:13 · 47 阅读 · 0 评论 -
10.正则表达式匹配
第一次写文章,创建这个重要也是为了激励自己不要混了,明年大四了,再混就没了先从刷题开始写吧,顺便充当一下自己的学习记录leetcode10:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:原创 2020-07-23 13:33:19 · 162 阅读 · 0 评论