- 博客(10)
- 收藏
- 关注
原创 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
原创 Delete Node in a Linked List
题目大意:删除单链表中的某个节点,限制条件是只给你指向某个节点的指针(保证不会给你指向最后一个节点的指针),让你删除这个节点。 比如 1->2->3->4,给你指向3这个节点的指针,然后让这个链表变为1->2->4 思路分析:由于是单链表,所以我们没有办法获取这个节点前面的一个节点,但是我们可以把后面一个节点的值赋值给当前节点,然后将当前节点指向后面一个节点的后一个节点。 代码如下: vo
2015-12-19 22:59:26 429
原创 快速排序
算法步骤:1、取最左边元素为基准元素。 2、从右往左,找到一个小于基准元素的位置j,从左往右,找到一个大于基准元素的位置i,交换两个位置的值。 3、若此时i 4、若此时i=j,则说明找到了基准元素的最终位置,将该位置的元素同最左边基准元素进行交换。 注意事项一:第2步中必
2015-12-18 15:02:34 317
原创 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
原创 Simplify Path
题目大意:给一个Unix风格的文件的绝对路径,将其进行简化。例如: 路径 "/home/", => "/home" 路径 "/a/./b/../../c/", => "/c" 思路分析:利用栈。 代码如下: char* simplifyPath(char* path) { int i, t=1;
2015-12-16 16:01:51 341
原创 基本排序算法——选择,插入,冒泡
#include void print_arr(int a[], int n) { int i; for(i=0; i<n; i++) { printf("%d%c", a[i], i==n-1 ? '\n' : ' '); } } void selection(int a[], int n) { int i, j, min, t; for(i=0; i<n-1; i++) {
2015-12-16 14:23:48 402
原创 Valid Parentheses
题目大意:给一个字符串,由“(”,“{”,“[” 和 “)”,“}”,“]”六个字符组成,判断这个字符串是否是一个有效的括号组合。 比如“()”和“(){}[]”都是有效的,“(])”就是无效的。 思路:从前往后扫描字符串,如果是左括号就入栈,如果是右括号就与栈顶元素进行比较,匹配的话就将栈顶元素出站,继续向后扫描,不匹配的话直接返回false,字符串扫描完之后,如果栈刚好为空就说明是有效的,
2015-12-09 18:21:34 406
原创 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 810
原创 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
原创 Sort Colors
题目大意:给一个n个元素的数组,由0,1,2三个数组成,要求将这个数组按照从小到大的顺序排列。 直观想法:遍历一遍数组,分别统计0,1,2三个元素的个数,然后根据各个元素的个数将原来的数组进行覆盖。这种方法需要对数组进行两轮遍历,第一轮遍历统计个数,第二轮遍历覆盖原数组。 改进想法:一次遍历即可将原数组排好序。一般来说排序算法都不太会是O(n)时间复杂度的,这道题之所以能做到这一点是因为只有3
2015-12-07 15:46:29 419
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人