leetcode
文章平均质量分 65
奔跑吧小蜗牛
志存高远,脚踏实地。
展开
-
Set Matrix Zeroes
题目大意:给一个m行n列的二维数组,如果某一个位置的值是0,就将该位置所在的整行和整列的值都设置为0.进一步的要求是:额外需要的空间能否控制在O(1) space。思路分析:第一种直观的思路是使用O(m+n)额外的空间,通过遍历二维数组记录哪些行和哪些列的值将会被全部置为0。第一种思路的代码如下:void setZeroes(int** matrix, int matrixRowSize, i原创 2015-12-08 23:41:06 · 809 阅读 · 0 评论 -
Spiral Matrix
题目大意:给一个m行n列的二维数组,要求以螺旋顺序返回所有元素。例如二维数组[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]将返回[1,2,3,6,9,8,7,4,5]思路分析:每次螺旋一圈作为外层循环,内层循环分为四段,从左往右,从上到下,从右往左,从下到上。先上代码:int* spiralOrder(int** matrix, i原创 2015-12-07 18:51:17 · 526 阅读 · 0 评论 -
Sort Colors
题目大意:给一个n个元素的数组,由0,1,2三个数组成,要求将这个数组按照从小到大的顺序排列。直观想法:遍历一遍数组,分别统计0,1,2三个元素的个数,然后根据各个元素的个数将原来的数组进行覆盖。这种方法需要对数组进行两轮遍历,第一轮遍历统计个数,第二轮遍历覆盖原数组。改进想法:一次遍历即可将原数组排好序。一般来说排序算法都不太会是O(n)时间复杂度的,这道题之所以能做到这一点是因为只有3原创 2015-12-07 15:46:29 · 419 阅读 · 0 评论 -
Valid Phone Numbers
题目大意:写一段shell脚本将一个文件中的所有有效电话号码输出来。有效的格式只有两种(xxx) xxx-xxxx 或者 xxx-xxx-xxxx(x代表数字)。思路分析:用正则表达式。代码如下:# Read from the file file.txt and output all valid phone numbers to stdout.awk '/^((\([0-9]{3}\原创 2016-01-05 14:29:34 · 320 阅读 · 0 评论 -
Word Frequency
题目大意:写一段shell脚本来将一个文本文件中出现的单词的频度进行统计,并按照频度大小倒序输出。假设每行的单词都是由一个空格分隔的,并且假设任何两个单词的频度都不相同。比如文本为:the day is sunny the thethe sunny is is则输出为:the 4is 3sunny 2day 1代码如下:# Read from the file word原创 2016-01-05 15:08:08 · 1122 阅读 · 0 评论 -
Tenth Line
题目大意:给一个多行的文件,让你写一段shell脚本把文件的第10行输出来。方法一:# Read from the file file.txt and output the tenth line to stdout.count=0while read line && [ $count -le 10 ]do count=$[$count+1] if [ $count -原创 2016-01-05 14:17:04 · 431 阅读 · 0 评论 -
Insertion Sort List
题目大意:用插入法排序单链表思路分析:就是插入法的思想,跟插入排序数组不同的是:插入排序数组是从后往前找插入的位置,而插入排序链表只能是从前往后找合适的插入位置。最关键的就是控制好指针的状态。为了避免头结点引起的麻烦,可以自己定义一个头结点让它指向传入链表的头结点,定义一个outer指针用来控制插入排序的外层循环,用一个tail指针用来保持始终指向内层循环的最后一个节点(即outer所指节点前原创 2016-01-05 13:57:07 · 405 阅读 · 0 评论 -
Palindrome Linked List
题目大意:判断一个单链表是否是回文串。要求O(n)时间和O(1)空间。解题思路:快慢指针确定链表中间节点,再逆转后半部分节点,再同时从两端向中间遍历链表。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; *原创 2015-12-20 00:12:08 · 330 阅读 · 0 评论 -
Delete Node in a Linked List
题目大意:删除单链表中的某个节点,限制条件是只给你指向某个节点的指针(保证不会给你指向最后一个节点的指针),让你删除这个节点。比如 1->2->3->4,给你指向3这个节点的指针,然后让这个链表变为1->2->4思路分析:由于是单链表,所以我们没有办法获取这个节点前面的一个节点,但是我们可以把后面一个节点的值赋值给当前节点,然后将当前节点指向后面一个节点的后一个节点。代码如下:vo原创 2015-12-19 22:59:26 · 429 阅读 · 0 评论 -
Simplify Path
题目大意:给一个Unix风格的文件的绝对路径,将其进行简化。例如: 路径 "/home/", => "/home" 路径 "/a/./b/../../c/", => "/c"思路分析:利用栈。代码如下:char* simplifyPath(char* path) { int i, t=1;原创 2015-12-16 16:01:51 · 341 阅读 · 0 评论 -
Add Binary
题目大意:给2个二进制字符串,求它们的和。比如:a = "11" b = "1" 返回 “100”思路分析:模拟加法运算,用一个变量保存进位。代码如下:char* addBinary(char* a, char* b) { int k, t, carry=0; int alen = strlen(a); int blen = strlen(b);原创 2015-12-16 17:56:23 · 504 阅读 · 0 评论 -
Valid Parentheses
题目大意:给一个字符串,由“(”,“{”,“[” 和 “)”,“}”,“]”六个字符组成,判断这个字符串是否是一个有效的括号组合。比如“()”和“(){}[]”都是有效的,“(])”就是无效的。思路:从前往后扫描字符串,如果是左括号就入栈,如果是右括号就与栈顶元素进行比较,匹配的话就将栈顶元素出站,继续向后扫描,不匹配的话直接返回false,字符串扫描完之后,如果栈刚好为空就说明是有效的,原创 2015-12-09 18:21:34 · 406 阅读 · 0 评论 -
Copy List with Random Pointer
题目大意:复制一个具有随机指针的链表。也就是说一个单链表中的每一个节点除了有next域之外还有一个random域,这个域指向这个单链表中的任意一个节点,当然也可以不指向任何节点,让你复制这个链表。思路分析:遍历第一遍先将单链表复制出来,第二遍遍历时再更新random域,在第一遍遍历的过程当中保存旧链表节点和新链表节点之间的映射关系,以旧链表的节点为key,以相对应的新链表节点为value。原创 2016-01-11 22:52:09 · 338 阅读 · 0 评论