- 博客(14)
- 收藏
- 关注
原创 使用两个栈来实现一个队列简单的push和pop
题目:给定一个栈的结构,用它来实现一个队列分析:栈结构已知。由于栈是LIFO,队列是FIFO,我们使用两个栈来实现一个队列,是队列的输入正常,输出就导入另外一个栈内进行输出。参考答案:class Queue{private:stack inputStack;stack outputStack;public:void enqueue(int);int dequ
2017-01-08 15:23:02
986
原创 设计一个带有push,pop和max的栈
题目:设计一个栈,带有push(),pop()和max()的功能分析:对于一个栈,本身就带有push和pop的功能,所以这道题目的重点是设计一个栈可以返回该栈中所有值的最大值。最简单的想法就是使用一个另外的栈,这个栈的功能用来保存最大的值,并且在元素入栈的时候进行比较,确定输入元素的最大值。参考答案:#include "stdafx.h"#include#include
2017-01-08 15:01:17
1432
原创 将两个有序链表合并成一个有序链表
题目:给定两个有序的链表,编写一个函数来合并这两个链表,并且返回一个新的有序的链表分析:这两个链表已经有序,所以,只需要对着两个链表的元素依次进行比较即可,这是对两个链表操作的基本问题。参考答案:(非常简单)#include "stdafx.h"#includeusing namespace std;struct ListNode{int val;ListN
2017-01-07 21:17:34
760
原创 将两个链表的元素相加
题目:给定两个链表,链表的每一个元素都是整数,编写一个函数来返回一个新的链表,他是给定的两个链表的和例如a:输入(7->1->6)和(5->9->2)输出(2->1->9)即为:617+295=912b:输入(6->1->7)和(2->9->5)输出(9->1->2)即为:617+295=912分析:对于a,b两种链表相加的情况,a比较简单,顺序遍历链表,然后将链表的两个元素相
2017-01-07 20:15:45
589
原创 判断一个可能包含一个环的链表的环的开始节点
题目:给定一个可能包含一个环的链表,编写一个函数,返回环开始的节点,如果该链表不包含环,则返回NULL分析:定义两个链表指针runner和chaser,从某个位置开始,runner以两倍速度前进,chaser以一倍速度前进,如果有环,这两个指针一定会在某处相遇,相遇时,让chaser从头结点再次出发,此时,runner和chaser都以一倍速度前进,则第二次相遇的地方就是环开始的地方(可以使用
2017-01-06 21:28:59
302
原创 找到一个单项链表中,距离最后一个元素为k的那个元素
题目:在一个单向链表中,找到距离最后一个元素为k的那个元素,例如,给定一个链表,1->2->3->4,并且k=2,这时返回的元素是2分析:找到距离最后一个元素为k的那个元素,依旧使用两个链表指针runner和chaser,区别在于让runner提前k步出发,当runner到达链表的尾部时,chaser正好到距离尾部k的位置处。参考答案:#include "stdafx.h"#inc
2017-01-06 21:21:18
441
原创 给定一个链表,编写函数返回链表的中间点
题目:给定一个链表,编写一个函数返回该链表的中间点分析:在链表的处理过程中,使用两个链表指针,可达到很好的处理效果。例如在本题中,使用两个链表指针runner和chaser,其中runner一次行走两步,chaser一次前进一步,当runner到链表尾部时,chaser正好到链表的中间参考答案:(没有写主函数)#include "stdafx.h"#includeusi
2017-01-06 21:12:53
718
原创 给定一个链表和一个值x,编写函数,对该链表进行重排,使小于x的节点在前面
题目:给定一个链表和一个值x,编写函数,对该链表进行重排,使小于x的节点都出现在大于或者等于x的节点的后面分析:题目很简单,主要的做法就是创建一个哑节点指向头结点(原因:不知道哪一个节点会出现在头结点上),由于链表是是申请内存空间,最后要记得释放内存,否则会造成内存泄露。参考答案:(实际运行的,绝对正确)#include "stdafx.h"#includeusing
2017-01-06 19:55:05
1085
原创 获取一个数组中最长的连续的元素序列
题目描述:获取一个数组中最长的元素序列。例如,给定了[31,6,32,1,3,2],其中最长的连续的元素序列是[1,2,3],最后返回其长度3分析:判断当前节点是属于一个序列的,只需判断前一个或者后一个节点也在序列中即可,即判断array[i]-1和array[i]+1也是位于这个序列中即可。如果这样判断的话,就需要保存过程中的部分值,为此,可以采用哈希表来保存计算的中间值。参考解
2017-01-05 15:32:42
997
原创 判断一个字符串的所有字符是否都是唯一的(使用hash表方法)
哈希表几乎是最为重要的数据结构,主要用于基于“键”的查找,存储的基本单元是键-值对。逻辑上,数组可以作为哈希表的一个特例。以下将举出哈希表的两个应用。1.判断一个字符串所有的字符是否都是唯一的思路:这道题的关键是“唯一”,题目中一旦出现“唯一”,就考虑使用哈希表或者bitset来判断元素出现与否的范畴。使用bitset,需要建立字符到整数下标的映射关系。下面简单介绍一下bi
2017-01-04 22:25:59
3584
原创 用DP解决最长子序列问题
“最长子序列”问题(即有限空间内,满足一定条件的最长顺序子序列)一般的解法:用DP表来记录以当前节点为末节点的序列的解,这样可以固定问题的一端,以下以两个例子来讲子序列问题。1.在一个整数数组中,找到最长的递增子序列。分析:用DP表来记录以当前节点为末节点的序列的最大长度。maxLength[i]=max{maxLength[k],k=0~i-1and array[i]
2017-01-03 19:20:40
444
原创 合唱队,对n个人挑出n-k个人,剩下k个人排成合唱队
题目描述: 华为机试题-- 计算最少出列多少位同学,使得剩下的同学排成合唱队形 说明: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1Ti+
2016-11-15 17:11:06
1389
原创 删除字符串中出现的最少的字符
华为笔试题原题如下所示:实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。编程思想: 获取字符串数组,利用字母的ASCII码表示成计数数组的下标,然后数组里面记录字符出现次数,遍历新数组,将最小的记录删除,输出原数组,具体代码如下所示:c++代码如下所示:#includ
2016-11-14 17:20:41
649
原创 欢迎使用优快云-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-11-14 17:19:20
212
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅