
剑指offer
海里波特
每一篇博客,不为别的,证明我的成长。每一次发文,不为别的,证明我严阵以待。蜗牛爬得很慢,却终有一日登上参天大树。因为它热爱
展开
-
剑指offer--重建二叉树
//题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 /** * Definition for binary tree * struct TreeNode { * in...原创 2019-07-13 20:53:19 · 103 阅读 · 0 评论 -
360视频面问题整理
1.大端序和小端序:端序(Endianness),又称字节序、尾序、位序。在计算机领域是指机器存放多字节数据的字节顺序。在涉及到低层数据存储和网络数据传输研究中都会涉及端序。大端序(Big-Endian,大尾序):高位字节放在内存的低地址,低位字节放在内存的高地址;0x12345678的大端字节序为:[0x12, 0x34, 0x56, 0x78],地址从左至右依次升高小端序(L...原创 2019-08-26 16:21:25 · 157 阅读 · 0 评论 -
360公司 2020秋招 技术综合B卷 ,表面积问题
当时在线写时碰到了定义二维数组时使用 vector<vector<int>> arr,但是在cin >> arr[i][j]; 会出现错误,超出范围的问题,不晓得怎么解决,然后百度后使用了现在定义二维数组的方法,int **arr;arr = new int *[N];for (int i = 0; i < N; i++) arr[i]...原创 2019-08-25 22:31:35 · 558 阅读 · 2 评论 -
经典快速排序 与随机快排(应用荷兰国旗问题优化)
1.经典快速快速排序:时间复杂度不稳定时间复杂度:O(N*logN)~O(N2)1.经典快排的实现逻辑:先从数列中取出一个数作为基准数(通常取最后一个数)。 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 再对左右区间重复第二步,直到各区间只有一个数。代码实现:/*快速排序 ,借鉴03-荷兰国旗问题,提高效率...原创 2019-08-15 16:37:58 · 275 阅读 · 0 评论 -
数组实现大小固定的队列和栈
1.数组实现栈#include<iostream>using namespace std;class arr_to_stack{private: int size; int initsize; int *arr;public: void stack(int _initsize) { if (_initsize < 0) { cou...原创 2019-08-24 13:53:55 · 131 阅读 · 0 评论 -
荷兰国旗问题
荷兰国旗问题与数组:给定一个数组arr,和一个数num,请把小于num的数放到数组的左边,等于num的数放在数组的中间,将大于Num的数放到数组的右边,额外空间复杂度为O(1),时间复杂度为O(N)代码实现:void Partition(int arr[], int L, int R, int num)//判断当前位置的值和比较值的大小{ int less = L - 1,...原创 2019-08-14 15:39:09 · 143 阅读 · 0 评论 -
堆排序
堆和完全二叉树的关系: 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 堆:堆又分为大根堆和小根堆。 堆和二叉树的有什么关系:我们假设有一颗二叉树处理满足作为完全二叉树的基础上,对于任意一个拥有父节点的 子节点...原创 2019-08-18 17:25:43 · 130 阅读 · 0 评论 -
斐波那契数列问题,青蛙跳台阶问题
1.题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39斐波那契数列公式:f(n)=0 n=0f(n)=1 n=1f(n)=f(n-1)+f(n-2) n>1class Solution {...原创 2019-07-17 22:09:31 · 253 阅读 · 0 评论 -
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。选择排序和冒泡排序的区别:选择排序从第一个位置开始比较,找出最小的,和第一个...原创 2019-07-19 21:13:05 · 118 阅读 · 0 评论 -
冒泡排序
冒泡排序的原理: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 及两两排序,先把大的放到最后面n的位置,然后不再把最后面的进行比较,比...原创 2019-07-19 20:26:05 · 153 阅读 · 0 评论 -
旋转数组的最小数
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题目分析: 这是一道二分查找的变形题目1.旋转之后的其实可以划分为两个有序的子数组:...原创 2019-07-18 19:54:29 · 97 阅读 · 0 评论 -
二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路: (1) 若该节点存在右子树:则下一个节点为右子树最左子节点(如图节点 B ) (2) 若该节点不存在右子树:这时分两种情况: 2.1 该节点为父节点的左子节点,则下一个节点为其父节点(如图节点 D )...原创 2019-07-16 10:18:38 · 91 阅读 · 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.难点:怎么判断是否为最后一行#include<iostream>#include<vector>...原创 2019-08-31 22:12:19 · 122 阅读 · 0 评论