随笔分类 -  算法

剑指offer——二叉树中和为某一值的路径
摘要:题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 递归思想 # -*- coding:utf-8 -*- # class TreeNod 阅读全文

posted @ 2018-08-27 10:15 法杰拉 阅读(194) 评论(0) 推荐(0)

剑指Offer——整数中1出现的次数(从1到n整数中1出现的次数)
摘要:题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 阅读全文

posted @ 2018-08-23 16:15 法杰拉 阅读(173) 评论(0) 推荐(0)

剑指offer——树的子结构
摘要:题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None 阅读全文

posted @ 2018-08-23 14:21 法杰拉 阅读(91) 评论(0) 推荐(0)

剑指offer——反转链表
摘要:题目描述 输入一个链表,反转链表后,输出新链表的表头。 这个题目有两种写法,非递归和递归的写法,我们先说非递归的写法,,设计三个指针,pre,cur还有post,代码里面用a、b、c分别来表示,依次迭代反转。 # -*- coding:utf-8 -*- # class ListNode: # de 阅读全文

posted @ 2018-08-23 13:28 法杰拉 阅读(165) 评论(0) 推荐(0)

剑指offer——重建二叉树
摘要:题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 # -*- coding:utf-8 -*- # c 阅读全文

posted @ 2018-08-20 00:12 法杰拉 阅读(152) 评论(0) 推荐(0)

剑指offer——二维数组中的查找
摘要:题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 # -*- coding:utf-8 -*- class Solution: # array 二 阅读全文

posted @ 2018-08-20 00:02 法杰拉 阅读(118) 评论(0) 推荐(0)

删除链表中重复的结点
摘要:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 利用递归的思想方便理解 阅读全文

posted @ 2018-08-12 11:23 法杰拉 阅读(129) 评论(0) 推荐(0)

二叉树先序遍历(非递归)
摘要:二叉树的先序遍历(非递归)特别简单 直接上代码,根节点先入栈,然后循环栈不为空,pop出来后让右节点和左节点分别入栈 阅读全文

posted @ 2018-08-09 23:42 法杰拉 阅读(566) 评论(0) 推荐(0)

二叉树的中序遍历(非递归)
摘要:中序遍历是先遍历左子树,在自身,再遍历右子树, 非递归实现的方法,一直遍历左节点,然后出栈,在遍历右节点 阅读全文

posted @ 2018-08-09 23:34 法杰拉 阅读(1586) 评论(0) 推荐(0)

二叉树的后序遍历(非递归方法)
摘要:二叉树的后序遍历的话,利用stack进行非递归遍历,要先访问每个节点的左子树,在访问右子树,然后访问自身, stack 一直循环,当栈顶节点(cur)的左右子树都是None的时候, 或者当pre节点不是None的时候,同时pre和cur节点的左右子节点中的一个相等的时候 可以出栈并访问 阅读全文

posted @ 2018-08-09 23:30 法杰拉 阅读(223) 评论(0) 推荐(0)

排序算法(五)——快速排序
摘要:快速排序和归并排序一样都是基于递归求解,将问题划分成两个子问题,时间复杂度都是O(nlogn),不同的是快速排序的是基于元素与选定x的大小关系来划分。PS:一般我们选定序列第一个元素作为选定x。 示例序列:9 4 8 6 5 2 1 3 7 10 将9作为选定标准进行划分,小于等于9的都放在左边,大 阅读全文

posted @ 2015-12-27 22:53 法杰拉 阅读(304) 评论(0) 推荐(0)

排序算法(四)——归并排序
摘要:归并排序时间复杂度为O(nlogn); 假设有序列list[begin,......,end],以mid=(begin+end)/2作为划分点,将序列划分为list[beging,....,mid]和list[mid+1,.......,end],分别进行排序,我们只需要将这两个已经排好序的序列归并 阅读全文

posted @ 2015-12-27 22:09 法杰拉 阅读(354) 评论(0) 推荐(0)

排序算法(三)——插入排序
摘要:插入排序算法思想: 将无序序列最左端的元素插入到有序序列中 示例代码: #include <iostream> using namespace std; void swap(int &a,int &b){ int temp=a; a=b; b=temp; return;}void Insert_so 阅读全文

posted @ 2015-12-25 21:44 法杰拉 阅读(186) 评论(0) 推荐(0)

排序算法(二)——选择排序
摘要:上篇博客介绍了冒泡算法,接下来介绍插入排序和选择排序. 选择排序; 算法思想:从无序序列中找到最大(或最小)元素,放在序列的最右边(或最左边)。 代码如下: #include <iostream> using namespace std; void swap(int &a,int &b) { int 阅读全文

posted @ 2015-12-25 21:16 法杰拉 阅读(224) 评论(0) 推荐(0)

排序算法(一)——冒泡排序
摘要:刚开始自己的博客,就从最基本的排序算法开始吧,最近自己也在复习算法相关的内容。 这里先讲讲时间复杂度为O(n2)的几种排序算法吧——冒泡排序,选择排序,插入排序;以上排序皆以升序为例,数组为list[begin..........end]。 冒泡排序: 名字很形象,就像烧开水冒泡一样,小的在底下,大 阅读全文

posted @ 2015-12-23 23:01 法杰拉 阅读(261) 评论(0) 推荐(0)

导航