leetcode
yefengzhichen
这个作者很懒,什么都没留下…
展开
-
leetcode之路002 Add Two Numbers
Add Two Numbers 题目大意:用两个链表来代表两个非负的数,这两个数是逆序存在链表中的,并且每一个点中只存放一位数字,现在要加两个数字,用一个此格式的链表来存储并返回。例: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 题目有点难理解,刚开始一位只是对应位单纯的相加,然后留下个位数。但上述例子中却不满足原创 2015-07-23 22:14:29 · 1200 阅读 · 0 评论 -
leetcode之路050 Pow(x, n)
题目:实现pow(x,n)。 挺简单的一个题目,有两个注意点: 1、不能直接用循环多次相乘,效率太低。 2、n可能为负数。(第一次提交错误就是这个原因) 下面是提交ac的代码,运行时间4ms: class Solution { public: double myPow(double x, int n) { double resu; double temp; if(n>原创 2015-11-27 17:11:29 · 1255 阅读 · 0 评论 -
leetcode之路051 N-Queens
题目大意:n皇后问题,使得每一个皇后与其它皇后不在同一行、同一列和同一斜线上。 思路: 深度优先遍历所有情况,遇到不满足时则回溯,可以有非递归实现和递归实现。 ac的代码如下: class Solution { public: vector> solveNQueens(int n) { vector> resu; vector tmp; fo原创 2015-11-27 17:12:18 · 621 阅读 · 0 评论 -
leetcode之路048 Rotate Image
题目大意:给定一个代表图片的n*n的2d矩阵,将它顺时针旋转90,并且满足就地操作。 思路: 思路1、自己想的思路,比较复杂:对于一个点(x,y),令i=x,j=y,交换(x,y)和(j,n-i-1),即用第一个元素和旋转90度的元素交换,然后更新i,j值,将第一个元素和旋转180度的值交换,接着270度,此时结束对(x,y)的操作。改变(x,y),继续进行,直到旋转完毕。 下面是a原创 2015-11-27 17:10:13 · 516 阅读 · 0 评论 -
leetcode之路049 Group Anagrams
题目大意:给定一个字符串数组,将其中所有颠倒字母组成的字符串放到一起。 例如,给定一个数组: ["eat", "tea", "tan", "ate", "nat", "bat"], 返回结果为: [ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ] 对于结果中的一个组,字符串必须是按字典序排序的。并且所有字符是小写的。原创 2015-11-14 14:09:29 · 481 阅读 · 0 评论 -
leetcode之路046 Permutations
题目大意:给定一个数字的集合,返回所有的组合形式。 例如:【1,2,3】返回[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1] 思路:对于这种问题,一般都是递归求解,在递归中改变参数的值。可以考虑深度遍历。 最近刷题少,想了好久,下面是ac的代码,运行时间12ms: class Solution { publ原创 2015-10-26 21:21:46 · 587 阅读 · 0 评论 -
leetcode之路042 Trapping Rain Water
题目大意:给定n个非负的整数来代表高度图,每个条的宽度为1。计算下雨后它能装多少的水。 例:0,1,0,2,1,0,1,3,2,1,2,1], 返回 6 思路: 1、从左往右进行以下操作,先找到一个从最左边开始的极大值点(此点高度大于左右两边的高度),即nums[i]>=nums[i-1]且nums[i]>nums[i+1] 2、在上述点之后查找高度值大于它的点,如果存在,则计原创 2015-10-26 21:12:16 · 529 阅读 · 0 评论 -
leetcode之路041 First Missing Positive
题目大意:给定一个没有排序的整数数组,找到第一个未出现的正数。 例:[1,2,0]结果为3。[3,4,1,-1]结果为2。 要求:算法必需是O(n)时间,并且是常量空间。 思路一: 1、利用hash表,遍历每一个元素,将其中大于0的值作为实际值和键值加入到hash中。 2、从键值为i=1开始逐次加1查找,当不能找到此键值的元素时,此时的i即为所求。 上述思路为刚开始没注意到常量原创 2015-10-26 21:11:52 · 451 阅读 · 0 评论 -
leetcode之路001 Two Sum
一、Two Sum 给定一个整数的数组,让你找到两个数,使得他们的和为特定的一个数。返回这两个数的下标值,并且第一个必须小于第二个。题目假定对于特定的数,此数组总可以找到满足要求的数。例: Input: numbers={2, 7, 11, 15}, target=9 Output: index1=1, index2=2 自己的思路:1、对于一个排序的数组,这个问题就变得很原创 2015-07-23 21:05:01 · 3513 阅读 · 0 评论 -
leetcode之路003 Longest Substring Without Repeating Characters
题目大意:很好理解,求最长的没有重复元素的子串的长度,例如:“abcabcbb”结果是abc,长度3,“bbbbb”结果时b,长度1. 思路:用hash_map做的,因为每次找下一个字符时,都需要从前面的子串中进行查找操作,利用hash_map达到快速查找。因为不需要要排序操作,因此程序中是用的unordered_map。 1.令最长的无重复子串长度为max,i从0循环到字符串长度减去max原创 2015-07-24 19:49:49 · 772 阅读 · 0 评论 -
leetcode之路008 String to Integer (atoi)
题目大意:实现atoi的功能,把一个字符串转化为整数。 首先的考虑所有的情况,有以下: 1、字符串为空,返回0; 2、字符串中含有‘ ’空格字符,则需要跳过所有空格; 3、考虑符号问题,‘-’和‘+’,最开始自己就没想到‘+’也要考虑; 4、然后必须为数字0-9,如果不为数字,则返回前面已经确定的值。例:“-123a87”,返回的是-123,而不是直接返回错误的值,这这也是最开始完全没想原创 2015-07-26 21:02:54 · 579 阅读 · 0 评论 -
leetcode之路007 Reverse Integer
题目大意:翻转一个整数,如下: Example1: x = 123, return 321 Example2: x = -123, return -321 需要注意的是,int整数范围为-2^31 ~ 2^31 - 1,10,0000,00003翻转后会超出范围。 刚开始没注意到这个问题,因此出错了好几次,最后提交ac的代码如下,运算时间20ms: class Solutio原创 2015-07-26 19:15:48 · 701 阅读 · 0 评论 -
leetcode之路006 ZigZag Conversion
题目大意:给定一个以之字形形式存储的字符串,并且给定之字形的行数,如下,行数为3,给定的string为"PAYPALISHIRING" P A H N A P L S I I G Y I R 然后现在一行一行的读取其值,得到"PAHNAPLSIIGYIR" 现在给定一个字符串s和行数numRows,输出其转换后的字符串。 首先考虑边界条件:s的长度小于行数,则直原创 2015-07-26 16:37:03 · 507 阅读 · 0 评论 -
leetcode之路011 Container With Most Water
题目大意:给定n个非负的整数a1,a2...ai,每个点表示一个坐标(i,ai),从坐标轴上画n条直线,分别是连接(i,0)和(i,ai)的。其中任意两条直线看成一个容器,向里面装水,现在要找到所有容器中能容纳的水最多为多少。 意思是两条直线,一个高位h1,另一个为h2,装水的高度最多为h1。 思路一:直接遍历求解,复杂度O(n^2) 对每一条直线,求出它和其它所有直线所构成容器的盛水大小m原创 2015-07-28 20:53:42 · 631 阅读 · 0 评论 -
Leetcode题目解答汇总
Leetcode题目解答汇总 断断续续的在leetcode上刷了一些题,每次遇到一时解决不了的都跳过了,以至于没有完整的熟悉每个题。因此汇总在此,实时更新,方便继续刷题以及后期回顾。 1、001 Two Sum:http://blog.csdn.net/yefengzhichen/article/details/47020871 2、002 Add Two Numbers:htt原创 2016-06-18 19:08:33 · 1467 阅读 · 0 评论 -
leetcode之路010 Regular Expression Matching
这个题目之前没做出来,放着没管。最近因为三个原因,又开始重新刷了。一是最近算法学习得多了,想多练习一下。二是,既然leetcode很多题目刷过,可以重新做做,看下思路是不是更清晰,做得更快,同时之前不会的可以再试试能不能做出来。三是,以前是c++做的,一月份转java后,需要用java来练习下。 发现一个习惯蛮好的是,一时间做不出来的,可以先放一段时间,再去做,说不定会有思路。因为自己想出来的印原创 2016-09-04 20:57:39 · 660 阅读 · 0 评论 -
leetcode之路005 Longest Palindromic Substring
#include "stdafx.h" #include #include #include #include using namespace std; class Solution { public: string longestPalindrome(string s) { int i,j; int max=0,len=0; string原创 2015-07-26 13:16:16 · 582 阅读 · 0 评论 -
leetcode之路004 Median of Two Sorted Arrays
题目大意:有两个已排序的数组nums1和nums2,长度分别为m和n,找到两个排序数组合成数组的均值。要求时间复杂度必须为O(log(m+n))。 这个题显示的难度为hard,在理解题意时,忘记了中位数的定义,编写的时候纠结了好长一段时间。对一个排序数组,数组个数为奇数,中位数为中间元素的值,数组个数为偶数,中位数为中间两个元素的均值。好了,下面说下思路。 思路: 1、要找中位数,必原创 2015-07-25 22:34:48 · 674 阅读 · 0 评论 -
leetcode之路038 Count and Say
题目大意:一个count-and-say序列是一个整数的序列,前面的定义如下,给定一个整数n,输出第n个序列。 1,11,21,1211,111221,312211。。。 如何构造这个序列的: 1 is read off as "one 1" or 11. 11 is read off as "two 1s" or 21. 21 is read off as "one 2,原创 2015-10-13 20:10:19 · 553 阅读 · 0 评论 -
leetcode之路036 Valid Sudoku
题目大意:确定一个数独是否有效。数组面板可能是部分填满的,空着的元素用'.'表示。 数独规则:每一行有1-9不重复,每一列必须有1-9不重复,每个9方格中必须有1-9不重复。 思路: 1、暴力枚举求解,设一个数组a[10],记录1-9出现的次数。 2、对数组,每一行的9个元素,依次遍历,判断1-9出现的次数,如果有元素超过2,则返回false,否则继续下一行。 3、对数组,每一例的9个元原创 2015-09-21 18:14:41 · 473 阅读 · 0 评论 -
leetcode之路035 Search Insert Position
题目大意:给定一个排序的数组,给定一个值,如果找到了,则返回其下标。没有找到,则返回其插入位置。 假设数组没有重复元素。 实例: [1,3,5,6], 5 → 2 [1,3,5,6], 2 → 1 [1,3,5,6], 7 → 4 [1,3,5,6], 0 → 0 思路:很简单的二分查找,在做了033后,稍微修改一下就可以达成目的。 下面是ac的代码,运原创 2015-09-18 19:53:27 · 409 阅读 · 0 评论 -
leetcode之路022 Generate Parentheses
题目大意:给定n对圆括号,写一个函数求出所有的匹配组合。 例如:n=3,则所有的匹配组合为: "((()))", "(()())", "(())()", "()(())", "()()()" 这个排列组合在做一次算法的笔试题遇到过,要求n=6时的所有可能组合的数目。当时没做出来,这次又遇到,查了一下,发现这种形式的问题,都是满足卡塔兰数的。详细说明见百度百科。因此算法的求解和这个没多大关原创 2015-08-02 13:17:01 · 475 阅读 · 0 评论 -
leetcode之路021 Merge Two Sorted Lists
题目大意:合并两个有序的链表为一个新链表,新链表必须是原来两个链表元素的组成。即不能新建一个链表,找到两个链表中的小值,新建一个节点对其赋值为此值。也就是说,不能有新建节点的操作(准确点说是能新建,但不能让结果链表指向这个节点)。 思路: 1、两个指针分别指向两个链表首,比较链表首的大小,若不满足l1->val>=l2->val,则交换两个链表。之所以这样做,是要将所有元素排序的结果接到l1为原创 2015-07-31 20:25:57 · 417 阅读 · 0 评论 -
leetcode之路020 Valid Parentheses
题目大意:给定一个字符串,只包含'(', ')', '{', '}', '[' ,']'要求判断yige原创 2015-07-31 20:25:21 · 489 阅读 · 0 评论 -
leetcode之路019 Remove Nth Node From End of List
题目大意:从一个链表中删除第n个元素。如: Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5. 注意:n总是有效的,而且要在一趟内完成。 思路:相差n个,只能访问一趟原创 2015-07-30 19:22:45 · 393 阅读 · 0 评论 -
leetcode之路017 Letter Combinations of a Phone Number
题目大意:给定一个数字的字符串,返回所有的有数字代表的字母组合。 例: Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 思路: 1、用一个字符串数组表示每个数字代表的字母,对输入的第一个数字,直接将此数字代表的所有字母加入到结果resu中; 2、原创 2015-07-30 19:19:49 · 527 阅读 · 0 评论 -
leetcode之路013 Roman to Integer
#include "stdafx.h" #include #include #include #include #include using namespace std; class Solution { public: int romanToInt(string s) { unordered_map map; map['I']=1;map['V']=5;map['X原创 2015-07-29 23:32:01 · 437 阅读 · 0 评论 -
leetcode之路014 Longest Common Prefix
题目大意:找到一个字符串数组的最大公共前缀字符。挺简单的一个题,求解如下。 思路:对第一个第二个字符串,找到最长前缀为te,然后找te和第三个的最长前缀,依次循环到最后即可。循环中加入判断te是否为空,若为空直接返回空。 提交ac的代码如下,运行时间8ms: class Solution { public: string longestCommonPrefix(vector& str原创 2015-07-29 23:35:06 · 429 阅读 · 0 评论 -
leetcode之路012 Integer to Roman
题目大意:将整数转化为罗马形式表示,输入为1-3999。对照表: 基本字符 I V X L C D M 相应的阿拉伯数字表示为 1 5 10 50 100 500 1000 思路: 1、用map记原创 2015-07-28 20:56:58 · 479 阅读 · 0 评论 -
leetcode之路023 Merge k Sorted Lists
题目大意:将n个已排序的链表合并为有序的链表,分析和描述它的复杂性。 例如:3->4->5->6->7,2->8->9,3->6->10,4->5->7。排序结果2->3->3->4->4->5->5->6->6->7->7->8->9->10。 思路: 1、必须得对n个链表的首元素进行比较,找到最小值,设最小值所在的链表为temp,新建一个节点存放其值,然后将temp指向下一个节点,即此链原创 2015-08-16 06:50:27 · 484 阅读 · 0 评论 -
leetcode之路034 Search for a Range
题目大意:给定一个已排序的数组,找到给定目标值在数组中出现的起始和结束位置。算法的时间复杂度要求是O(logn)。 假如没有找到,则返回[-1,-1]。 例:[5, 7, 7, 8, 8, 10],给定值8,返回[3,4]。给定值为9,返回[-1,-1]。 很简单的题目,思路: 1、对于给定的值,用lower_bound返回其初始位置; 2、用upper_bound返回其结束位置的下一个原创 2015-09-13 10:07:18 · 388 阅读 · 0 评论 -
leetcode之路029 Divide Two Integers
题目大意:实现两个整数的除法,不能用乘、除、取余操作,假如溢出了,返回INT_MAX。 思路: 1、首先考虑溢出的情况,用两种:除数为0的时候,被除数为INT_MIN、且除数为-1的时候。 2、最简单的思路:由除数n得到被除数m,可以用循环加法来得到。小于的时候,则加上一个除数,同时令计数器加1,直到大于被除数时,结束,返回计数器结果。但此方法效率过低,在被除数极大,而除数很小的时候原创 2015-09-13 07:49:56 · 517 阅读 · 0 评论 -
leetcode之路028 Implement strStr()
题目大意:实现函数strstr(string haystack, string needle)。返回haystack中第一次出现needle的下标。注意是下标,从0开始的。 这个题目,可简单点做,直接循环遍历,可复杂度点,提高效率,即kmp算法。 思路一: 1、当needle长度为0,返回0。 2、令两个字符串长度为m,n,则外层循环m次,对haystack中每一个字符i开始进行判断是否匹原创 2015-08-20 21:56:16 · 436 阅读 · 0 评论 -
leetcode之路027 Remove Element
题目大意:给定一个数组和值,删除数组中所有等于这个值的元素,需要在原数组中进行,返回其新长度。 其余元素的位置可以被改变,并且新长度之后的元素可以不管。 和上一题十分相似,Remove Duplicates from Sorted Array。 思路: 1、处理数组为空的情况,返回0。 2、用两个指针,一个用来遍历数组每一个元素记为p,另一个用来记录当前不等于val值的元素个原创 2015-08-20 21:23:02 · 367 阅读 · 0 评论 -
leetcode之路031 Next Permutation
题目大意:实现下一个排列,将一些数字按照字典序大小,找到字典序在它后面一个的数字组合。 假如此数字排列为最大,则返回最小的字典序。交换必须就地实现,即在原空间完成,不能分配额外的内存空间。 例:1,2,3返回1,3,2;3,2,1返回1,2,3。 思路: 前面看STL源码剖析时,看过此算法的实现原理。因此直接实现即可。 对于一个排列,要找下一个排列,,设排列用一个数组a表示,分为原创 2015-09-07 23:49:50 · 452 阅读 · 0 评论 -
leetcode之路026 Remove Duplicates from Sorted Arrayy
题目大意:给定一个排序的数组,在原数组中删除其中重复多余的元素,使得每个元素只出现一次,并且返回其新长度。 不要用额外的数组空间,必须使用常量空间。例如:{1,1,2,2,2,3,4,5,5,5}得到长度为5,数组前五个必须为{1,2,3,4,5},后面的元素可以任意。 思路: 1、处理数组为空的情况,返回0。 2、用两个指针,一个用来遍历数组每一个元素记为p,另一个用来记录当前不重复元素原创 2015-08-18 20:11:13 · 401 阅读 · 0 评论 -
leetcode之路024 Swap Nodes in Pairs
题目大意:给定一个链表,交换每两个邻接的节点。例: 给定 1->2->3->4, 应该返回2->1->4->3. 算法应该用常量空间,不能修改链表的值,只能修改节点本身。 上述要求,也就是,只能改变链表next的指向,不能交换节点元素的值来达到目的。交换值的话就非常简单了。 思路: 1、用三个链表指针即可,一个保存结果链表头。另两个移动找到相邻元素并交换指向。 对于任意两个元素原创 2015-08-16 06:51:24 · 410 阅读 · 0 评论 -
leetcode之路009 Palindrome Number
public: bool isPalindrome(int x) { if(x<0) return false; else if(x<10) return true; int m=x/10,n=1; while(m) { m=m/10; n=n*10; } while(x>0) { if原创 2015-07-27 10:02:35 · 539 阅读 · 0 评论