剑指office
star714cong
有没有答案,不重要,重要的是充满期待!
展开
-
二维数组关键字查找
题目: 一个二维数组, 每行从左至右递增, 每列从上到下递增; 给一关键值, 查找数组中是否存在该关键值 如下示例 1, 2, 8, 9 2, 4, 9, 12 4, 8, 10, 13原创 2016-09-14 21:31:48 · 461 阅读 · 0 评论 -
字符串的排列
题目:输入一个字符串(各字符互不相等),输出其全排列。 比如输入abc 输出abc acb bac bca cab cba 思路: 全排列思想 先固定第一个字符, 第一个字符可以为字符串中任意一个。实现方式: for(int i = 0; i原创 2016-09-21 22:51:04 · 223 阅读 · 0 评论 -
字符串过滤
题目: 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。 要求实现函数: void stringFilter(const char *pInput, char *pOutput); 思路:原创 2016-09-23 22:59:53 · 967 阅读 · 0 评论 -
从上往下打印二叉树
题目: 比如 二叉树 1 2 3 4 5 6 7 输出 1 2 3 4 5 6 7 思路:原创 2016-09-19 21:52:33 · 316 阅读 · 0 评论 -
数组转化为二叉树
题目: 数组按照前序遍历方式方式转化为二叉树 思路: 二叉树前序遍历变形 代码: Node * BinaryInit(int *a, int index, int len) { if (index > len - 1) return NULL; Node *pNode = (Node *)malloc(sizeof(Node));原创 2016-09-19 21:38:59 · 3002 阅读 · 0 评论 -
顺时针打印矩阵
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。如输入 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 输出 0 1 2 3 7 11 15 14 13 12 8 4 5 6 10 9 思路: 递归原创 2016-09-18 20:53:05 · 219 阅读 · 0 评论 -
合并两个排序的链表
题目: 输入两个递增序列的链表, 合并这两个链表使新链表中的序列仍是递增的。 结点结构定义: typedef struct Node { int val_; struct Node *next; }Node; 思路: 定义链表1, 链表2, 可以将链表1作为主体链表(即将链表2中的结点依次插入链表1中) 对链表1定义两个指针, 初始值为pPre1 = NULL原创 2016-09-17 22:12:52 · 265 阅读 · 0 评论 -
链表中倒数第k个结点
题目: 输入一个链表,输出该链表中倒数第k个结点。为符合大多数人习惯,本题从1开始计数,即链表的尾结点是倒数第一个结点。例如一个链表有6个结点,从头结点开始他们的值依次是1 2 3 4 5 6,该链表倒数第三个结点是值为4的结点 结点定义如下: typedef struct Node { int val_; struct Node *next;原创 2016-09-17 17:51:35 · 225 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分 思路: 利用快排的思想。 对于数组 1 3 4 23 45 32 定义两个指针low , high ,low指向第一个元素, high指向最后一个元素。 并且设置一个类似监听的变量listen = a[0]; 先判断hi原创 2016-09-17 17:14:50 · 225 阅读 · 0 评论 -
O(1)时间删除链表结点
题目: 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点定义为 typedef struct Node { int val_; struct Node *pNext; }Node; void deleteNode(Node *pHead, Node *pNode); 且假设 该结点指针指向一定在链表中, 存在头结点(值存放结点个数)原创 2016-09-17 16:44:21 · 242 阅读 · 0 评论 -
打印1到最大的n位数
题目: 输入2 则输出1~99 输入3 则输出1~999 思路: 属于大数问题,因为输出的n一大,则特别容易出现溢出问题,即超出long long可表示的范围。 所以用一般的思路: 根据n的位数,先求出最大的值,接着遍历。 是不符合要求的 新思路: 将n位的每一位看成是一个字符, 输出的数字只是n位字符的全排列。原创 2016-09-17 14:26:06 · 273 阅读 · 0 评论 -
二进制中1的个数
题目: 输入一个十进制数, 输出其二进制表示中1的个数 注: 计算机存储数字的补码 正数源码与补码一样 负数不一样 -1 的原码 10000001(假设8位) 补码(取反加1,符号位不取反)1111 1111 代码: int Func(int num) { int i = 0;原创 2016-09-15 20:58:54 · 196 阅读 · 0 评论 -
斐波那契数列
题目: f(n) = 0 n=0 1 n=1 f(n-1) + f(n-2) n > 1 思路一: 递归(效率低) 代码: int Fibnaci原创 2016-09-15 20:02:51 · 326 阅读 · 0 评论 -
旋转数组的最小数字
题目: 把一个数组最开始的若干元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如{3 4 5 1 2}为{1 2 3 4 5}的一个旋转,数组最小值为1。要求时间复杂度小于o(n)。 思路: 二分法变形 旋转数组为两个有序子序列 一般情况下, 另p1指向第0原创 2016-09-15 19:32:34 · 293 阅读 · 0 评论 -
重建二叉树
题目: 已知二叉树 前序遍历 {1, 2, 4, 7, 3, 5, 6, 8} 中序遍历{4, 7, 2, 1, 5, 3, 6, 8}; 重建二叉树。 树结点结构 typedef struct Node { int val原创 2016-09-15 14:34:07 · 235 阅读 · 0 评论 -
从尾到头打印链表
题目: 输入一个链表的头结点, 从尾到头反过来打印出各结点的值 链表结点定义 typedef struct Node { int value;原创 2016-09-14 23:10:08 · 178 阅读 · 0 评论 -
排序数组合并
题目: 两个排好序数组A、B。 A的末尾有充足内存容纳B。 实现函数,将B中所有数字插入到A中且是排序的 思路: 定义三个指针: pa1 指向插入数据前A的末尾元素 ; pa2指向插入数据后A的末尾元素;pb1指向B的末尾元素 若插入数据前A大小为len1, B大小为len2, 则pa2指向len1+len2-1的位置原创 2016-09-14 22:22:59 · 234 阅读 · 0 评论 -
替换空格
题目: 实现一个函数,将字符串中空格符替换为 “%20”。 示例: 输入 “we are family”; 输出 “we%20are%20family” 要求: 不可以重新定义字符串, 可对原字符串扩容 思路: 替换前字符串长度为len1;原创 2016-09-14 21:42:48 · 205 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2 , 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. 思路1: 基于Partition函数的O(n)算法 对数组排序,排序后中间的数一定是出现次数超过数组长度一半的数字,即中位数。采用快排思想排序,随机选择数字pivot,比a原创 2016-09-26 15:05:00 · 256 阅读 · 0 评论