剑指offer
文章平均质量分 73
miangmiang咩
这个作者很懒,什么都没留下…
展开
-
二叉搜索树的后序遍历序列||剑指offer
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 图一 class Solution { public: bool judge(vector& sequence, int start, int end){ if(start == end)原创 2016-03-04 22:41:50 · 437 阅读 · 0 评论 -
删除重复链表
每个链表值只出现一次 class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead == NULL) return pHead; map counts; ListNode* nNode = pH原创 2016-04-09 22:45:15 · 461 阅读 · 0 评论 -
合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public:原创 2016-04-09 22:44:22 · 375 阅读 · 0 评论 -
顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. class Solution { public: vector printMatrix(vect原创 2016-04-09 22:43:35 · 406 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。 class Solution { public: int NumberOf原创 2016-04-09 22:43:14 · 430 阅读 · 0 评论 -
二叉树的深度
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), r原创 2016-04-09 22:42:38 · 374 阅读 · 0 评论 -
和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。 class Solution { public: vector FindNumbersWithSum(vector array,int sum) {原创 2016-04-09 22:41:59 · 350 阅读 · 0 评论 -
翻转单词顺序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?原创 2016-04-09 22:41:04 · 353 阅读 · 0 评论 -
不用加减乘除做加法
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 class Solution { public: int Add(int num1, int num2) { int sum, carry; do{ sum = num1 ^ num2; ca原创 2016-04-09 22:40:36 · 272 阅读 · 0 评论 -
17.合并两个排序的链表|剑指Offer
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 依次地遍历两个链表的结点,并进行比较大小,使用新的链表结点指向小的结点,可以使用递归; /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next原创 2016-04-09 20:09:46 · 294 阅读 · 0 评论 -
面试题五:从尾到头打印链表|剑指offer
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。(牛客网编程版) 与面试官确定题意:因为是从尾到头反过来打印每个结点,则要确定一下可不可以改变原来的链表结构? 下面,我将从改变链表结构和不改变链表结构来分析: 通常打印是一个只读操作,不希望修改打印的内容,所以我们先从不改变链表结构来分析 从尾到头打印,跟栈的后进先出的模式有点相似,可以考虑使用栈来处理: /** * s原创 2016-04-09 17:12:05 · 413 阅读 · 0 评论 -
16链表的反转|剑指offer
题目描述 输入一个链表,反转链表后,输出链表的所有元素。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(Li原创 2016-04-09 17:10:43 · 439 阅读 · 0 评论 -
数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 class Solution { public: void FindNumsAppearOnce(vector data,int* num1,int *num2) { int length = data.size(); if(len原创 2016-03-21 17:50:33 · 418 阅读 · 0 评论 -
第一个只出现一次的字符位置
题目描述 在一个字符串(1 class Solution { public: int FirstNotRepeatingChar(string str){ if(str.empty()) return -1; const int tableSize = 256; unsigned int has原创 2016-03-21 17:41:41 · 388 阅读 · 0 评论 -
数组中出现次数超过一半的数字||剑指offer
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 class Solution { public: int MoreThanHalfNum_Solution(vector numbers) {原创 2016-03-21 17:38:02 · 594 阅读 · 0 评论 -
包含min函数的栈|剑指offer
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数 图解如下: 图1: class Solution { private: std::stack val; std::stack minVal; public: void push(int value) { val.push(value); i原创 2016-03-07 18:55:07 · 540 阅读 · 0 评论 -
旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 class Solution { public: int MinInOrder(vector& rotateArray, int原创 2016-04-09 22:47:38 · 473 阅读 · 0 评论