
算法
betterMia
专注时空数据挖掘,交通大数据分析,地图匹配。
展开
-
【算法】二叉树的遍历
二叉树的四种遍历方式:前序遍历:先访问根节点,然后前序遍历左子树和右子树;中序遍历:中序遍历根结点的左子树,然后访问根节点,最后中序遍历根节点的右子树;后序遍历:后序遍历根节点的左子树和右子树,最后访问根节点;层序遍历:从根节点从上往下逐层遍历,在同一层按从左到右的顺序遍历。二叉树结点的定义:class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val原创 2020-09-28 19:55:57 · 688 阅读 · 0 评论 -
【算法】数值的整数次方
一、题目给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。注:base和exponent不同时为0。二、解题思路当exponent>0时,本题的本质就是快速乘法。当exponent<0时,baseexponent=1base−exponentbase^{exponent}={1\over{base^{-expon...原创 2019-09-03 20:52:30 · 116 阅读 · 0 评论 -
【算法】二进制中1的个数
一、题目输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。二、解题思路首先回顾一下原码、反码、补码的概念:原码:原码是二进制数字的一种简单的表示法。二进制首位为符号位,1代表负,0代表正,其余位表示数值的大小。反码:正整数的反码是其二进制表示,与原码相同;负整数的反码,是原码除符号位外,其他位按位取反。补码:正整数的补码是其二进制表示,与原码相同;负整数的补码...原创 2019-09-03 20:33:23 · 318 阅读 · 0 评论 -
【算法】矩形覆盖
一、题目我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?二、解题思路当n>2n\gt2n>2时,矩形覆盖最后一步覆盖的方法有两种:最后用了一个竖着的2*1小矩形进行覆盖,如图最后用了一个横着的2*1小矩形进行覆盖,如图如果最后用了一个横着的2*1小矩形进行覆盖,那么最后两个2*1的小...原创 2019-09-02 22:19:11 · 1175 阅读 · 0 评论 -
【算法】变态跳台阶
一、题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。二、解题思路n级台阶的跳法有n种情况:最后一跳跳了一级最后一跳跳了两级……最后一跳跳了n级所以,n级台阶的跳法就相当于n-1级再跳一次一级台阶+n-2级再跳一次二级台阶+…+0级最后跳一次n级台阶的跳法之和,由此可得出以下递推公式:f(n)={0,n=01,n...原创 2019-09-02 18:50:01 · 200 阅读 · 1 评论 -
【算法】跳台阶
一、题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。二、解题思路n级台阶的跳法有两种情况:最后一跳跳了一级最后一跳跳了两级所以,n级台阶的跳法就相当于n-1级再跳一次一级台阶加上n-2级再跳一次二级台阶的跳法之和,由此可得出以下递推公式:f(n)={1,n=12,n=2f(n−1)+f(n−2),n&...原创 2019-09-02 16:47:12 · 822 阅读 · 0 评论 -
【算法】斐波那契数列
一、题目已知斐波那契数列为1,1,2,3,5,8,…。也就是除第1项和第2项为1以外,对于第N项,有F(N)=F(N-1)+F(N-2)。现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。二、解题代码实现使用 Python 2.7.3。(一)递归时间复杂度为O(n2)O(n^2)O(n2)。class Solution: def Fibonac...原创 2019-08-30 18:21:26 · 1522 阅读 · 0 评论 -
【算法】旋转数组的最小数字
一、题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。注:给出的所有元素都大于0,若数组大小为0,请返回0。二、解题(一)解题思路采用二分查找解决该问题。假设数组为[A, …, B, C, …, D]为非递增数组...原创 2019-08-29 19:55:22 · 107 阅读 · 0 评论 -
【算法】二维数组中的查找
一、题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。二、解题方法代码实现使用python 2.7.3。(一)一维二分查找遍历二维列表中的每一个一维列表,对每个一维列表使用二分查找判断是否含有该整数。算法的时间复杂度为O(mlogn)...原创 2019-08-29 14:17:10 · 197 阅读 · 0 评论