剑指offer
jovetickop
这个作者很懒,什么都没留下…
展开
-
剑指offer-面试题5 反向输出链表值
typedef struct ListNode* List;struct ListNode{ int Value; struct ListNode* Next;};void ReverseList1(List list) //使用递归{ if(list != NULL) { if(list->Next != NULL) {原创 2017-04-01 09:38:39 · 238 阅读 · 0 评论 -
剑指offer-面试题39 : 二叉树的深度
//方法1 : 通过类似快排的方法找到排在第k+1位置的数,并且左边都是比他小的,因此桌面的书就是k个最小的数#include<iostream>#include<vector>using namespace std;void Swap(int &a, int &b){ int temp = a; a = b; b = temp;}//和快排类似, 找一个枢纽元原创 2017-04-04 19:33:59 · 191 阅读 · 0 评论 -
剑指offer-面试题39 : 二叉树的深度
//方法1 : 通过类似快排的方法找到排在第k+1位置的数,并且左边都是比他小的,因此桌面的书就是k个最小的数#include<iostream>#include<vector>using namespace std;void Swap(int &a, int &b){ int temp = a; a = b; b = temp;}//和快排类似, 找一个枢纽元原创 2017-04-04 19:32:53 · 215 阅读 · 0 评论 -
剑指offer-面试题38 : 数字在排序数组中出现的次数
//如果直接遍历数组,则时间复杂度是O(n);//如果用二分法分别找出第一次出现的位置和最后一次的位置,再相减,时间复杂度就是O(log(n));#include<iostream>using namespace std;int GetFirstK(int Array[], int length, int K, int start, int end){ if(Array == NU原创 2017-04-04 19:29:06 · 189 阅读 · 0 评论 -
剑指offer-面试题37 两个链表的第一个公共节点
/*如果两个链表有公共节点,那么从公共节点开始,他后面的节点就都相同了。可以从后向前找出第一个不相同的节点,那么上一个就是第一个相同的,可以先让长链表先走几步,直到长短相同,再同步走,直到第一个相同的*/#include<iostream>#include<stack>using namespace std;typedef struct ListNode* Node;struct L原创 2017-04-04 19:28:33 · 238 阅读 · 0 评论 -
剑指offer-面试题31 求连续子数组的最大和
#include<iostream>using namespace std;//常规方法int FindMaxSumOfSubArray1(int Array[], int length){ if(Array == NULL || length <= 0) { throw exception("ERROR"); } int nMax = 0;原创 2017-04-04 19:27:36 · 194 阅读 · 0 评论 -
剑指offer - 面试题30 找出数组最小的k个数
//方法1 : 通过类似快排的方法找到排在第k+1位置的数,并且左边都是比他小的,因此桌面的书就是k个最小的数#include<iostream>#include<vector>using namespace std;void Swap(int &a, int &b){ int temp = a; a = b; b = temp;}//和快排类似, 找一个枢纽元原创 2017-04-04 19:26:57 · 166 阅读 · 0 评论 -
剑指offer - 面试题30 找出数组最小的k个数
//方法1 : 通过类似快排的方法找到排在第k+1位置的数,并且左边都是比他小的,因此桌面的书就是k个最小的数#include<iostream>#include<vector>using namespace std;void Swap(int &a, int &b){ int temp = a; a = b; b = temp;}//和快排类似, 找一个枢纽元原创 2017-04-04 19:24:42 · 252 阅读 · 0 评论 -
剑指offer-面试题29 找到数组中出现次数超过一半的数字-1
//方法一: 找出排序在中间的那个数字. 但是不是先排序,而是只要找到排在中间的数字就行.#include<iostream>using namespace std;void Swap(int &a, int &b){ int temp = a; a = b; b = temp;}//和快排类似, 找一个枢纽元,把小于枢纽元的数放在枢纽元左边, 返回枢纽元的位置原创 2017-04-04 19:17:41 · 199 阅读 · 0 评论 -
面试题12 打印从1到n位的最大数字
//输入数字n, 打印从1到n位的最大数字,如输入2, 打印1~99#include<iostream>using namespace std;bool IncreaseOne(char* charNumber, int n){ int nOverFlow = 0; //某一位需要进一位 int nSum = 0; //某一位的数计算后的和 bool bHig原创 2017-04-01 09:41:00 · 390 阅读 · 0 评论 -
剑指offer-面试题28_3 八皇后问题
//在国际象棋棋盘上摆放八个皇后,要求任意两个不能再同一行,同一列,同一对角线,.//先把一个8个数的数组用0~7填充,则每个排列都是一种放置方法,并且满足不在一行和一列,接下来求他们//的全排列,再判断是否满足不在一个对角线.#include<iostream>using namespace std;void Swap(int &a, int &b){ int temp = a;原创 2017-04-01 09:47:35 · 443 阅读 · 0 评论 -
剑指offer-面试题28 字符串的排列
//输入一个字符串.打印出该字符串中字符的所有排列.如输入abc, 打印abc,acb,bac, bca, cab,cba.#include <iostream>using namespace std;void Swap(char &a, char &b){ char temp = a; a = b; b = temp;}void Permutation(char原创 2017-04-01 09:47:00 · 335 阅读 · 0 评论 -
剑指offer-面试题26 复杂链表的复制
//实现复制一个复杂连表,在复杂连表中吗,每个节点出了指向下个节点的指针外,还有一个指针指向任意一个节点或者为NULL#include<iostream>using namespace std;typedef struct ListNode* List;typedef List Node;struct ListNode{ Node next; Node sibling;原创 2017-04-01 09:46:30 · 209 阅读 · 0 评论 -
剑指offer-面试题25 二叉树中和为某一值的路径
//输入一个二叉树和一个整数,打印出二叉树终结点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点经过的节点形成一条路径.#include<iostream>#include<vector>using namespace std;typedef struct BinaryTreeNode* Tree;typedef Tree Node;struct BinaryTreeNod原创 2017-04-01 09:46:00 · 275 阅读 · 0 评论 -
剑指offer-面试题24 二叉搜索树的后序遍历序列
//输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果,假设数组任意两个数不同#include<iostream>using namespace std;//判断左子树的所有值是否都小于根,右子树的值是否都大于根,然后递归.bool VerifyBinaryOfBST(int sequence[], int length){ if(sequence == NULL |原创 2017-04-01 09:45:26 · 181 阅读 · 0 评论 -
剑指offer-面试题23 分层遍历二叉树
//从上到下,从左到右,分层打印二叉树//从上到下按层遍历二叉树,从本质上讲就是广度优先遍历二叉树,不管是广度优先遍历二叉树还是图,都要用到一个队列第一步我们把起始节点放入队列,接下来每次从队列头部取一个节点,遍历这个节点之后把从它能到达的节点(对于树来说是子节点)都一次放入队列,我们重复这个便利过程,直到队列为空为止.#include<iostream>#include<queue>usi原创 2017-04-01 09:44:09 · 245 阅读 · 0 评论 -
剑指offer-面试题20 顺时针打印矩阵
//输入一个矩阵,按照从外向里依次顺时针打印每个数字#include<iostream>using namespace std;void PrintOneCircle(int **Matrix, int columns, int rows, int start){ int startX = start; int startY = start; int endX = c原创 2017-04-01 09:43:32 · 218 阅读 · 0 评论 -
剑指offer-面试题18 判断二叉树B是不是二叉树A的子结构
//输入两颗二叉树A, B,判断B是不是A的子结构typedef Tree* Node;struct Tree{ Node LeftNode; Node RightNode; int value;};//判断NodeB是否是NodeA的子结构bool HasSubTree(Node NodeA, Node NOdeB){ bool result = fa原创 2017-04-01 09:42:48 · 383 阅读 · 0 评论 -
剑指offer-面试题40 : 数组中只出现一次的两个数字
//有一个数组,有两个数字只出现一次,其他数字都出现了两次,求这两个只出现一次的数字。//先用异或求出那两个数字的异或和,因为这两个数字不同,那么他们肯定有一位是不同的,那么//这个异或和的二进制肯定至少有一位是1,找出这个位置,再根据这个位置将这个数组分为两组,分别异或求和,最后这两个数组就剩下那两个数字了。#include<iostream>using namespace std;//找到原创 2017-04-04 19:35:18 · 420 阅读 · 0 评论