
LeetCode
金泽尚
程序员一枚
展开
-
LeetCode (2)Add Two Numbers
(2)Add Two Numbers题目:给定两个非空的链表,代表两个非负整数,数字以相反的顺序存储,每个节点包含一个单一的数字,加上这两个数字返回一个链表。输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8对于这样的一道题,原来做过“大数相加”问题的应该都知道怎么做,而且这道题已经简单到了数字都已经给你倒过来了,所以直接向后每个链节自己加就可以了。我的代码原创 2017-04-12 13:56:03 · 205 阅读 · 0 评论 -
LeetCode (27)Remove Element
(27)Remove Element题目:将所给数组内的等于某个数的元素去掉,返回心数组长度。例如:所给数组为nums = [3, 2, 2, 3],要去掉的数字为val = 3,返回数组为nums_new = [2, 2],长度为2。另外:不要开新的内存,只能使用现有开辟的内存。元素的顺序可以改变。数组新长度外留下什么都没关系。跟上一道题很像,基本就是一次面试里一个问题的进阶版,跟上一道题的思路相原创 2017-05-11 15:14:22 · 212 阅读 · 0 评论 -
LeetCode (15)3Sum
(15)3Sum题目:在一个数组里面找到三个数字和等于0,输出所有的可能性,不要存在重复的组。例子:提供的数组:s=[-1, 0, 1, 2, -1, -4],返回的结果应该是:[ [-1, 0, 1], [-1, -1, 2]]。这道题本来想按原来两个数相加的那个来算,引用map,但是后来发现无法获取是否前面已经输出同样的结果,所以就很麻烦,或许有解决方法,但是暂时觉得可能会兜圈子,不如直接使用简原创 2017-04-21 11:17:49 · 200 阅读 · 0 评论 -
LeetCode (16)3Sum Closest
(16)3Sum Closest题目:在一个数组里找到和目标结果最为接近的三个数字的和,返回此和数。例子:所给数组为 S = {-1,2,1,-4},同时目标结果target = 1。数组中最接近目标结果的三个数字之和为2。(-1 + 2 + 1 = 2)。根据题目的特点,尤其是有第15题的铺垫,整个题目就相当于把和数等于0改成可变的和数的情况,同时使用std::min,和std::abs的方法原创 2017-04-24 14:34:41 · 280 阅读 · 0 评论 -
LeetCode (17)Letter Combinations of a Phone Number
(17)Letter Combinations of a Phone Number题目:通过所给字符串,返回按下数字可能返回的字符串组合,数字和字符的关系如同手机键盘一样。例子:输入:字符串为“23”。输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]。首先想到的就是队列,不停地通过队列的每一组字符串相加获得下一组字符串,然后再把下原创 2017-04-24 16:21:10 · 266 阅读 · 0 评论 -
LeetCode (18)4Sum
(18)4Sum题目:在所给的数组中,寻找符合四个数和等于目标数的组合,返回所有组合。例子:所给数组为 S=[1, 0, -1, 0, -2, 2],同时目标数为target = 0。返回的集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]]这道题是属于3Sum的变形,这种情况下,同样适用3Sum的方法就可以了,我看很原创 2017-04-24 17:08:14 · 223 阅读 · 0 评论 -
LeetCode (19)Remove Nth Node From End of List
(19)Remove Nth Node From End of List题目:将一个链表的倒数第N个链节去掉。例子:所给的链表是: 1->2->3->4->5,同时 n = 2。移除链节之后,链表为: 1->2->3->5。根据题目,想到的就是通过从前向后计算链表长度然后去掉第len - n个链节就可以了。我觉得可能会有更好的算法,就看了一下几个博客,使用的方法是将两个指针中间间隔n个,一起向后原创 2017-04-24 18:29:53 · 181 阅读 · 0 评论 -
LeetCode (28)Implement strStr()
(28)Implement strStr()题目:返回字符串里子字符串的位置,如果没有则返回-1。例子:haystack="abcd",needle="cd",返回2。haystack="abcd",needle="e",返回-1。根据这道题我的想法就是搜一遍,当然在第一次搜索的时候,产生一次TLE,原因就是循环中次数的限制没有做对,由于在第一个字符串中找子字符串,所以如果此时搜索的位置后面的长原创 2017-05-15 14:23:55 · 227 阅读 · 0 评论 -
LeetCode (29)Divide Two Integers
(29)Divide Two Integers题目:不用除法计算一个数与另一个数的商。另外:当结果溢出int范围的时候,输出int范围最大的数字。例如:输入:dividend:-10;divisor:-1;输出:10。输入:dividend:-2147483648;divisor:1;输出:-2147483648。本来题目还是挺简单的,但是就这个int范围搞得有点烦。除法就是减法的简单方法,然原创 2017-05-15 20:34:31 · 189 阅读 · 0 评论 -
LeetCode (20)Valid Parentheses
(20)Valid Parentheses题目:判断一个字符串是否符合括号使用规则,字符串里有”()”,”[]”,”{}”三种。例子:”()”和”({}[])”都是正确的,但是”([)”,”({)[}]”都是错误的。想过之后,觉得直接用栈就可以实现整个字符串的查找,从头搜索,如果搜到的符号是左符号,那么就压入栈中,如果是右符号,那么如果栈是空,那么就直接返回错误,如果不是的话,栈顶必须是次符号的左符原创 2017-04-25 15:45:52 · 217 阅读 · 0 评论 -
LeetCode (21)Merge Two Sorted Lists
(21)Merge Two Sorted Lists题目:将两个排好序的链表合并成一个排好序的链表,不允许开额外的空间。例子:所给链表为l1 = 1->2->3,l2 = 2。返回链表为result = 1->2->2->3。根据题目就是简单的插入而已,在整个过程中将小的数字插在前面,大的数字放在后面就可以了。只不过用到的是链表,不是数组,所以整个过程中考虑的东西比较复杂,也是这道easy的题目原创 2017-04-26 11:44:20 · 224 阅读 · 0 评论 -
LeetCode (31)Next Permutation
(31)Next Permutation题目:找到比目标数大的,只使用目标数内数字组成的最小的数。如果这种安排是不可能的,它必须重新安排它作为最低可能的顺序(即按升序排序)。更换必须到位,不要分配额外内存。例如:1,2,3 -> 1,3,23,2,1 -> 1,2,31,1,5 -> 1,5,1自己推算几次,找几个例子,就能有一个比较好的想法了。首先对于比这个数大的最小数,那么就是从最后位开始原创 2017-05-19 16:51:26 · 418 阅读 · 0 评论 -
LeetCode (33)Search in Rotated Sorted Array
(33)Search in Rotated Sorted Array题目:数组是一个排好序的循环数组,但是头不一定是哪个位置开始的,就比如排好序的数组是“ 1 2 3 4 5 6 7 8 ”,由于是循环的,所以可能给你的顺序是“ 7 8 1 2 3 4 5 6 ”,也可能是“ 4 5 6 7 8 1 2 3 ”,请在这个数组中找到目标数字,返回下标,如果没有则返回“-1”。例如: 输入数组为“ 4原创 2017-06-06 11:22:20 · 208 阅读 · 0 评论 -
LeetCode (34)Search for a Range
(34)Search for a Range题目:给定升序排序的整数数组,找到给定目标值的起始和终止位置,算法运行时间复杂度必须为O(logn)的时间复杂度,如果在数组中找不到目标,则返回[-1, -1]。例如:给定数组为[5, 7, 7, 8, 8, 10]和目标值8,返回[3, 4]。根据这道题的思路,最开始打算找整个目标数组的位置,这让就能得到整个数组的首尾,但是后来发现两端的处理并不是很原创 2017-06-21 10:58:38 · 228 阅读 · 0 评论 -
LeetCode (26)Remove Duplicates from Sorted Array
(26)Remove Duplicates from Sorted Array题目:把所给排好序的数组剔除重复数据,返回新数组的长度。例如:所给数组为nums = [1, 1, 2],返回的新数组为nums_new = [1, 2],长度为2。另外:不能使用其他数组,只能使用当前开辟的内存。O(n)的算法就可以解决问题,但是刚开始以为只是返回长度就可以,所以搜了一遍没有重复数字的数组长度,但是后台会原创 2017-05-11 14:59:44 · 202 阅读 · 0 评论 -
LeetCode (24)Swap Nodes in Pairs
(24)Swap Nodes in Pairs题目:将一个链表的每两个相邻链节做交换,输出交换后的链表。例如:链表为1->2->3->4,那么返回的链表是2->1->4->3。另外:不能开额外的链表空间。根据题目直接从前到后扫一遍就可以了,的确是很简单的一道题,但是有几点需要特殊注意,首先就是0长度的链表,然后就是奇数长度和偶数长度的链表,这个时候只要加一个对链节的判断就可以了。下面是代码:clas原创 2017-05-11 14:38:37 · 189 阅读 · 0 评论 -
LeetCode (14)Longest Common Prefix
(14)Longest Common Prefix题目:在多个字符串中找到最长公共子前缀。想到的方法也就几种,一种是暴力的去每两个去找一遍,两层循环,但是再思考一下,这种方法太原始了是不是,我们可以直接通过一个字符串去对比其他的字符串,直接找到那个最长的就好了,这样的话就只需要一层循环,找到最长的前缀。下面是代码:class Solution {public: string longest原创 2017-04-20 14:23:25 · 189 阅读 · 0 评论 -
LeetCode (1)Two Sum | LeetCode
(1)Two Sum | LeetCode题目:给定一个整数数组,返回可以达到特定和的两个数字下标。假定每个输入都会确切地有一个解决方案,但无法使用两次相同的数字。例如:所给数组 = [2, 7, 11, 15], 和(target) = 9, 那么因为0位和1位相加等于 2 + 7 = 9,所以返回 [0, 1]最开始的思路是直接寻找两个数的和等于和数,但是在两层循环的情况下,最差的情况是n^2,原创 2017-04-12 13:47:57 · 229 阅读 · 0 评论 -
LeetCode (3)Longest Substring Without Repeating Characters
(3) Longest Substring Without Repeating Characters题目:给定一个字符串的长度,发现最长的子连续串并且没有重复字符例如:“abcabcbb”,答案是“abc”,长度是3再例:“bbbbb”,答案是“b”,长度是1这道题是最长非重复连续子序列问题,第一个想法就是做成一个带下标的数组,然后通过数组的标记,获取序列长度。建立两个数组,一个是字符的重复位置,此原创 2017-04-12 16:30:50 · 221 阅读 · 0 评论 -
LeetCode (6)ZigZag Conversion
(6)ZigZag Conversion题目:字符串“PAYPALISHRING”写的是一个给定的字符串,写成这样一个曲折模式:P A H NA P L S I I GY I R然后逐行读取:“PAHNAPLSIIGYIR”。编写代码,会提供需要的字符串和变换成的行数:string convert(string text, int nRows);convert(“PAYP原创 2017-04-18 17:06:33 · 245 阅读 · 0 评论 -
LeetCode (7)Reverse Integer
(7)Reverse Integer题目:把数字倒过来。例子:x = 123, return 321。再例:x = -123, return -321。另:输入是32位有符号整数,当超出范围的时候,输出0。根据这个题目,想到的就是字符串,直接使用字符串处理就可以反过来输出。但是通过另外的最后一句话,我们不难发现,数字的范围仅在-2^31~2^31之间,那么需要处理的就只有0,数字超过10位或在等于十原创 2017-04-18 23:07:00 · 180 阅读 · 0 评论 -
LeetCode (8)String to Integer(atoi)
(8)String to Integer(atoi)题目:将一个字符串变换成为int整数。提示:仔细考虑各种可能的输入情况。看到这道题只想到了几种可能性,首先是首位有空格的,可能带加号表示正数的,可能超出int范围的,结果写出代码之后,测试用例又曝出有各种问题的字符串,这道题不难,就是难以抓住所有的情况,如果想要挑战的话,其实可以自己多提交几次,就会慢慢改出来了,这里我也写下自己碰到的几个发现的问题原创 2017-04-19 11:46:40 · 179 阅读 · 0 评论 -
LeetCode (9)Palindrome Number
(9)Palindrome Number题目:判断一个整数是否是回文数字,不要开额外的空间。由于前面做的几道题的思维惯性,如果将第一个数字直接模10,加到第二个整数上,然后对这个整数乘10再加刚才数字除以10后的数字再模10,再加到第二个整数上,如此循环,就相当于把数字倒了过来,在判断两个数字是否相同即可,另外,负数不是回文数字,下面是代码:class Solution {public:原创 2017-04-19 13:22:14 · 207 阅读 · 0 评论 -
LeetCode (10)Regular Expression Matching
(10)Regular Expression Matching题目:实现正则表达式匹配,支持“.”和“*”。‘.’:匹配任何单个字符。 ‘*’:匹配0个或多个前一个声明的字符。匹配需要匹配整个字符串。例如:isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*原创 2017-04-19 14:34:25 · 420 阅读 · 0 评论 -
LeetCode (4)Median of Two Sorted Arrays
(4)Median of Two Sorted Arrays题目:两个已经排好序的数组nums1和nums2,大小分别为m和n,求两个已排数组中位数。总运行时间复杂度应该是O(log(m+n))。用例1: nums1 = [1, 3]nums2 = [2]The median is 2.0用例2: nums1 = [1, 2]nums2 = [3, 4]The median is原创 2017-04-15 15:57:40 · 235 阅读 · 0 评论 -
LeetCode (11)Container With Most Water
(11)Container With Most Water题目:提供一个长度为N的非负整数串a1,a2,a3,a4……ai,每一个点代表一个垂直x轴的从(i,0)到(i,ai)的线段,求两个这样的线段和x轴包围的容器可以储存的最大水量。所谓短板效应就是桶里能装的最多水量是取决于最短那个板子的,当选择容器的时候,我们不需要两层循环把所有的问题都理一遍,所以我从最外面的两个开始,从最短的那边开始向内部移原创 2017-04-19 14:42:35 · 186 阅读 · 0 评论 -
LeetCode (12)Integer to Roman
(12)Integer to Roman题目:将一个整数转换成罗马数字,范围在1~3999。很简单很暴力,只需要知道罗马数字的表示方法就可以了。罗马数字表示:1~9:I,II,III,IV,V,VI,VII,VIII,IX,X;10,20~90:X,XX,XXX,XL,L,LX,LXX,LXXX,XC;100,200~900:C,CC,CCC,CD,D,DC,DCC,DCCC,CM;1000,原创 2017-04-19 15:55:47 · 193 阅读 · 0 评论 -
LeetCode (13)Roman to Integer
(13)Roman to Integer题目:将一个罗马字符串转换成整数,范围在1~3999。根据上一道题,如果从罗马数字转换成整数,直接从头搜索就好了,需要遵循的规则只有一条。当我们遇到”M”直接加1000,遇到”D”直接加500,遇到”C”的时候判断下一个字符是否是”M”或者”D”,如果是则减去100,否则加100,”X”也是如此,以此类推,就可以获得一个扫描之后的数字,直接返回就可以了。代码如原创 2017-04-19 20:04:09 · 233 阅读 · 0 评论 -
LeetCode (5)Longest Palindromic Substring
(5)Longest Palindromic Substring题目:给定一个字符串s,找出s中最长的回文子串,假设s最大长度是1000。例子:输入“babad”,输出“bab”。再例:输入“cbbd”,输出“bb”。通过动态规划的方式,判断长的子串是不是回文子串的时候,只需要判断子串首位是否相同,同时内部子串是否是回文子串,那么就定义一个dp[][],通过第i位和第j位的字符对比,如果相同,则dp原创 2017-04-16 15:33:58 · 170 阅读 · 0 评论 -
LeetCode (22)Generate Parentheses
(22)Generate Parentheses题目:写出所有n对“(”,“)”能组合成的符合正常规则的字符串。例如:当n=“3”的时候,答案集为:[ "((()))" "(()())" "(())()" "()(())" "()()()"]第一个想法就是直接DFS,很简单的搜一遍就完事了,把所有的可能放入vector里。当然符合规则是最重要的问题,不妨考原创 2017-05-10 19:14:52 · 221 阅读 · 0 评论 -
LeetCode (35)Search Insert Position
(35)Search Insert Position题目:在一个排好序的数组里,找目标数字位置,如果找到目标数字就返回下标,找不到数字就返回它应该插在的位置下标。例子:序列: 目标数字: 返回值:[1, 3, 5, 6] 5 2[1, 3, 5, 6]原创 2017-06-22 13:39:51 · 257 阅读 · 0 评论