- 博客(16)
- 资源 (16)
- 收藏
- 关注
原创 二叉树最小高度
给一个tree,定义height是根节点到叶子节点的距离中最短的一个,如何求出这个距离。int height(Node *root){ if (root == NULL) { return 0; } if (root->left == NULL) { return 1 + height(root->right); } else if (root->righ
2013-10-11 23:02:08 3939
原创 不用+、-、×、÷做加法
写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。int sum(int a, int b){ int result = 0; int factor = 1; int c = 0; while ((a != 0) || (b != 0)) { if ((a&factor) == 0 && (b&factor) == 0) {
2013-10-09 00:56:55 772
原创 RGB字符排序
给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。要求:空间复杂度是O(1),且只能遍历一次字符串。void fun(char a[], int n){ int i = -1; while (a[i+1] == 'R') { i++; } int j = n; while (a[j-1] == 'B') { j
2013-10-07 00:36:03 2265 1
原创 密码组合
字母a-z,数字0-9,现需要其中任意3个作为密码,请输出所有可能组合。void printAll(char outPut[], int k, int begin){ if (begin == k) { for (int i = 0; i < k; i++) { cout << outPut[i] << " "; } cout << endl; ret
2013-10-06 22:38:11 2513
原创 数组中缺少的数
数组a[n]里存有1到n的所有树,除了一个数removed,找出这个missing的树。要求时间复杂度O(n),空间复杂度O(1)。int fun(int a[], int n){ for (int i = 0; i < n; i++) { a[(a[i]%(n+1))-1] += n+1; } for (int i = 0; i < n; i++) { if
2013-10-06 19:48:22 1342
原创 二叉树和最大的子树
给一个二叉树,每个节点都是正或负整数,如何找到一个子树,它所有节点的和最大?struct Node{ int value; Node *left; Node *right;};int result = 0;bool maxSet = false;void postOrderVisit(Node *root){ if (NULL == root) { ret
2013-10-05 23:57:48 3387 3
原创 杨氏矩阵查找
一个m*n的矩阵,从左到右从上到下都是递增的,给一个数elem,求是否在矩阵中。bool find(int **a, int m, int n, int k){ int (*p)[n] = (int (*)[n])a; int i = 0; int j = n-1; while (i = 0) { if (p[i][j] == k) { return true;
2013-10-05 21:25:29 762
原创 链表位置调整
有一个长度为奇数的单向链表,要求将后半部分倒序插入前半部分。如:将1->2->3->4->5->6->7 变成 1->7->2->6->3->5->4。不能用额外空间。struct Node{ int value; Node *next;};void fun(Node *head, int len){ int count = len/2; Node *tail = hea
2013-10-05 20:13:07 859
原创 判断字符串是否是回文
判断一个字符串中的字母是否是回文,不区分大小写。如:"A man, a plan, a canal: Panama"是回文。bool isLetter(char a){ if (a = 'a') { return true; } if (a = 'A') { return true; } return false;}bool isLowerCase(char
2013-10-05 12:16:54 956
原创 链表翻转
给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6struct Node{ int value; Node *next;};Node* reverseList(Node *head, int k){ if (NULL == head || k <
2013-10-04 22:50:33 1596 2
原创 有序数组中某个数的起始和终止位置
给定一个排好序的整数数组以及某个值n。查找值n的起始和终止位置。如:{0, 0, 1, 1, 1, 5, 5, 6, 6, 6, 6, 7, 11},n=5,输出{5, 6}。要求时间复杂度小于O(n)。void fun(int a[], int len, int n){ int left = 0; int right = len-1; while (left < right-1
2013-10-04 18:45:44 1505
原创 查找二叉搜索树中小于某个节点的最大值
Node* rightMost(Node *n){ if (n->right == NULL) { return n; } while (n->right) { n = n->right; } return n;}Node *predecessor(Node *n){ if (NULL == n) { return NULL; } if (n->le
2013-10-04 12:04:47 2569
原创 合并两个排好序的单向链表
Node* mergeLists(Node *a, Node *b){ if (a == NULL) { return b; } if (b == NULL) { return a; } Node *head = NULL; if (a->value value) { head = a; a = a->next; } else { head = b;
2013-10-04 10:36:15 744
原创 计算四则运算表达式
给定一个四则运算表达式,计算返回值,表达式不带括号。如:"7-12/6", "1000-5*6/3*2+1"。struct Node{ int value; bool symbol; Node *next;};int fun(char a[], int n){ Node *head = new Node(); head->value = a[0] - '0'; h
2013-10-03 23:39:54 779
原创 交换单向链表的头结点和第n个节点
void swapNth(Node **head, int n){ if (head == NULL || *head == NULL || n == 1) { return; } int count = 0; Node *prev = *head; while (prev && count < n-2) { prev = prev->next;
2013-10-03 13:54:42 1574
原创 查找链表差集
已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。struct node{ int elem; node *next;};void difference(node **L
2013-10-01 23:35:48 1308
exceptional c++ style中文版 pdf 刘未鹏译
2010-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人