剑指Offer题解系列(四):重建二叉树 题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解法一:时间复杂度: O(n) Java:1234567891011121314151617181920212223242526272829303132 2018-12-11 剑指Offer题目详解 #剑指Offer #数据结构 #算法
剑指Offer题解系列(三):从头到尾打印链表 题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 解法一:借助辅助栈借助一个辅助栈,利用栈的先进后出的性质,达到反序输出链表值的效果。时间复杂度: O(n),辅助空间复杂度: O(n) Java:12345678910111213141516171819import java.util.ArrayList;import java.util.Stack;public clas 2018-12-10 剑指Offer题目详解 #剑指Offer #数据结构 #算法
剑指Offer题解系列(二):替换空格 题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 解法一:借助辅助字符流,当遇到非空格时,直接添加,遇到空格时,添加%20。时间复杂度: O(n),辅助空间复杂度: O(n) 123456789101112131415public class Solution { 2018-12-09 剑指Offer题目详解 #剑指Offer #数据结构 #算法
剑指Offer题解系列(一):二维数组中的查找 题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解法一:暴力迭代法遍历数组的每一个元素,不考虑数组的有序性,暴力遍历数组每一个元素。时间复杂度:O(m*n) m:行数 n:列数 12345678910111213public class Sol 2018-12-08 剑指Offer题目详解 #剑指Offer #数据结构 #算法
算法题思路总结 数组类型 数组有序查找题型 暴力解法可以摒弃数组的有序性,然后考虑,此时复杂度较高。 考虑有序,此时可尝试二分查找的思路。 多维数组时,若多维度有序,可考虑行,列之间的高级有序关系。 数组并非完全有序,但可以考虑部分有序或者部分递增递减性,使用二分法从而减少时间复杂度。 二分查找时可借助对整数数组查找double类型数字辅助查找重复数字索引。 剑指Offer题解系列(一):二维数组中的查找 2018-09-01 数据结构与算法 #数据结构 - 算法 #LeetCode #剑指Offer #Java
算法题解容器API C++数组std::arrayarray的底层数据结构是固定数组,它的大小在定义后就不能被改变。不支持添加和删除元素或改变容器大小等操作,在定义一个array容器的时候必须指定类型和大小。连续空间存储,不能增删、扩张大小,可通过下标或迭代器遍历,速度很快。常用操作: 初始化:如果我们对array进行列表初始化,初始值的数目必须等于或小于array的大小,如果初始值数目小于array的大小,则它们 2018-04-01 数据结构 #Java #数据结构 #Python #C++
剑指Offer题解系列(二十八):数组中出现次数超过一半的数字 题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 解法一:借助排序使用排序,如果存在超过一半的元素,则排序后的数组中间元素必定是占比超过一半的元素。然后再遍历一遍数组,判断中间元素数量是否超过一半。 时间复杂度: O(NlogN 2018-01-04 剑指Offer题目详解 #剑指Offer #数据结构 #算法