算法
独鹿
啊哈
展开
-
连通域求解
图像处理中连通域指由前景相同像素,并且相同像素邻接的像素组成的域。图像处理中一般都是对二值图像(1白色,0为黑色,一般前景为0黑色)做连通域分析。连通域分析指把连通域找出来并且标记出来。连通域标记方法:(1)两次遍历实现;(2)深度优先搜索遍历1.第一次遍历如果当前元素为0则赋值一个label,lebel从大于1开始,如果像素的邻接像素的标签有大于1的,则当前元素赋值为大于1的最小的label。记...原创 2018-03-18 17:25:56 · 3395 阅读 · 0 评论 -
537.复数处理
a1, a2 = map(int, a[:-1].split('+')) b1, b2 = map(int, b[:-1].split('+')) return '%d+%di' % (a1 * b1 - a2 * b2, a1 * b2 + a2 * b1)原创 2018-05-01 15:50:14 · 176 阅读 · 0 评论 -
数组中查找给定值
def findk(m,k): if m is None: return False r = 0 c = len(m[0])-1 while r<len(m[0]) and c>=0 andc<len(m): print r,c if m[r][c]==k: return True elif m[r][c]>k: c ...原创 2018-05-01 21:31:52 · 327 阅读 · 0 评论 -
连续顺子间隔思路
思路:去0,通过上下界来判断缺失间隔和摸到牌的数量之间的间隔。def isc(nums): l = nums nums = [num for num in nums if num!=0] t = {nums[0]} min_ = max_ = nums[0] for i in nums[1:]: if i in t: return ...原创 2018-05-02 00:11:27 · 123 阅读 · 0 评论 -
offer通过--7两个栈实现队列-2
# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack_1 = [] self.stack_2 = [] def push(self, node): # write code here self.stack_1.append(node) def...原创 2018-05-02 11:05:31 · 93 阅读 · 0 评论 -
offer通过--8两个栈实现队列-2
此题比较菜,求最小值而已,通过二分查找实现,但OJ时间限制,直接return min(array)了。原创 2018-05-02 11:39:38 · 112 阅读 · 0 评论 -
offer通过--9斐波那契数列-2
时间复杂度O(n)# -*- coding:utf-8 -*-class Solution: def Fibonacci(self, n): # write code here if n<2: return n mi = 0 ma = 1 r = 0 while n-1: ...原创 2018-05-02 11:55:28 · 125 阅读 · 0 评论 -
offer通过--11数值的整数次方-2
思路:递归,考虑指数为-1,0,1的情况。class Solution: def Power(self, base, exponent): # write code here flag =0 if exponent <0: exponent = abs(exponent) flag = 1 ...原创 2018-05-02 14:58:56 · 151 阅读 · 0 评论 -
offer通过--12打印1到最大的n的的位数-2
题目打印最大n位数,注意大数处理,采用stringdef n_(n): if n<0: return r = [str(9) for i in range(n)] print ''.join(r)原创 2018-05-02 15:12:03 · 135 阅读 · 0 评论 -
检验一颗树是不是另一颗树的子结构
思路:遍历树,使用递归方法。1.先判断节点值是否相等,如果相等则继续判断他们的子树是否相等;2.如果不相等则判断他们的子树是否相等。这样一直递归。退出条件为知道子树到叶节点了,class BinaryTreeNode(object): def __init__(self,data,left=None,right=None): self.data = data ...原创 2018-04-23 16:19:45 · 161 阅读 · 0 评论 -
字符串转整数
思路:用一个变量来处理符号位,最终结果乘以符号位。再根据第一位是不是符号来初始化最终结果的首个值,再根据每一位算最后的和,注意字符串取出来的时候还是字符串,所以要先转int型(根据实际需要看加不加最大值和最小值溢出判断,这里没加。)defstrToInt(str): first = 1 num = 0 if str is None: return False ...原创 2018-04-13 12:19:46 · 122 阅读 · 0 评论 -
从上到下逐层打印二叉树
解题思路:1. 把根节点放入队列;2. 把孩子放入队列后,3. 依次出队,入队(代码过程:用一个list来存放结点,将根结点首先放入list,然后while list的长度,打印根值,然后临时存l中根的左右结点,然后删除list的第一个元素,再判断左右是否存在,存在的直接加到list,不存在继续while list,这样一直下去list中的元素都会被打印后删除)classBina...原创 2018-04-18 22:55:36 · 487 阅读 · 0 评论 -
二叉树中和为给定值的所有路径
本质上是压栈出栈的过程1.写一个主题函数主题函数中要给定默认的树,给定的值,还要一个用来存路径的列表,再加一个记录路径长度的变量2.写一个找路径的函数首先要确定给的节点是不是一个空的,如果是空的则直接退出;其次,把当前节点加入到路径,把当前节点值加进路径长度然后,判断当前是不是叶子(叶子用一个变量表示)如果是叶子,则再判断叶子路径和和给定值是不是一样,一样则打印路径,不一样则不管如果不是叶子,则分...原创 2018-03-30 22:42:07 · 320 阅读 · 0 评论 -
求两个链表的第一个公共结点
思路:解法1,直接蛮力解,遍历两个链表,时间复杂度O(mn) 解法2.分析两个链表,两个链从第一个公共结点开始到链尾的结点是完全重合的,(链结构性质已经决定了该属性),所以从链尾开始比较,比到第一个不相同的结点就找到了第一个公共点。时间复杂度O(m+n),空间复杂度O(m+n),(存放链表的两个栈总空间m+n,第一次存放栈的时间max(m,n),第二次比较栈内元素的时间min(...原创 2018-04-16 00:24:26 · 128 阅读 · 0 评论 -
统计数组逆序对
在剑指offer中的36题,分析中给出两种解决方案,1.直接用蛮力解,时间复杂度为O(n^2);2.用归并解,时间复杂度为O(nlog)这里根据思路给出代码,书中写了用O(n)的空间换时间来完成,但感觉实际上并不需要空间,直接根据归并思想就可以操作。def countNum(data,start,end): if start == end: return 0 len...原创 2018-04-16 13:42:38 · 605 阅读 · 0 评论 -
第一次只出现一次的字符
思路:用字典来统计个数,但由于字典无序,所以再用一个数组来存放字典的顺序。dic = {}str_='abaccdeff'array =[]for i in range(len(str_)): if str_[i] not in dic: dic[str_[i]] =1 array.append(str_[i]) else: ...原创 2018-04-16 15:46:15 · 143 阅读 · 0 评论 -
二叉树的镜像树
思路:交换左右子树,时间复杂度O(n),先序遍历class TreeNode(object): def __init__(self,data,left = None,right =None): self.data = data self.left = left self.right = rightA = TreeNode("A")B = TreeNo...原创 2018-04-17 20:30:42 · 143 阅读 · 0 评论 -
圆圈中最后一个剩余数
# -*- coding:utf-8 -*-class Solution: def LastRemaining_Solution(self, n, m): # write code here if n<1 or m<1: return -1 last = 0 for i in range(2,n+1):...原创 2018-04-12 21:28:05 · 224 阅读 · 0 评论 -
不用乘除求和
1. 不用乘除法和for等关键字实现1++。。+n思路:用构造函数实现,然后用递归,但是递归中用了ifclass C(object): sum1 = 0 n = 0 def __init__(self): C.n += 1 C.sum1 += C.n def getSum(self): sum1 = self.sum1 ...原创 2018-04-12 22:37:03 · 129 阅读 · 0 评论 -
不用程序关键字求连续数字的和1+2+3+4+5...+n
思路:递归和循环都会用到关键字比如for,if,等,但是不允许使用那么如果通过其他方式实现for和if功能呢?1.连续相加,可以通过再函数里写构造函数来实现,没实例化一个函数在构造函数里做一次相关运算,但实例化n个的时候n不好控制。2.通过将函数写到两个类中,实现if判断功能,然后通过递归来实现。(用一个数组充放两个类,用n作为数组中元素个数,但n要通过转为bool类型后再两次取反可以转化为0,1...原创 2018-04-13 00:11:21 · 735 阅读 · 0 评论