数据结构算法
追风de少年_SHAOFENG
未曾清贫难成人
不经打击老天真
自古英雄出炼狱
从来富贵入凡尘!
展开
-
Java方式实现二叉树的前中后序遍历的递归及非递归算法
以Java方式实现的二叉树前中后序遍历的递归及非递归方式转载 2017-01-21 14:52:36 · 1478 阅读 · 0 评论 -
在线笔试-求二叉树中俩个节点的最低共同父节点
昨天做美团点评的在线笔试题中遇到一道求二叉树中俩节点的最低父节点的题,当时写的很乱做完之后在网上查了下发现这种题目有很多变种很有意思,特意记录下来备忘。求二叉树俩个节点的共同父节点大概有三种题型:1、二叉树为双向链表2、二叉树为二叉查找树3、二叉树为普通二叉树下面一一分析:1、二叉树为双向链表先建立数据模型:package Binary_tree;public原创 2017-03-23 20:01:01 · 768 阅读 · 0 评论 -
剑指offer之求数组中最小的n个数
牛客网上剑指offer原题:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。解法很多个人想到的四种下面一一记录下来:1、直接暴力解决使用数组自带的排序完后,取其前k个,这种时间复杂度很高为:O(k*nlog2n)解法很简单不想解释。2、冒泡排序外层循环的终止条件为i3、堆排序先循环建个大顶堆别问我为什么不用小顶原创 2017-03-22 11:19:02 · 778 阅读 · 0 评论 -
程序员必备排序之冒泡排序、快速排序
上篇讲了插入排序本篇讲交换排序,所谓交换排序便是根据序列中俩个元素关键字的比较结果来对换这俩个记录在序列中的位置。各排序算法的比较:二、交换排序2.1冒泡排序1、基本思想:假设待排序表长为N,从后往前(或从前往后)俩俩比较相邻元素的值,若为逆序则交换它们直到序列比较完,称为一趟冒泡。最多经过N-1趟冒泡就能把所有元素排序完。2、代码实现(优化版):package s原创 2017-03-20 17:16:32 · 363 阅读 · 0 评论 -
程序员必备排序之归并排序、基数排序
归并排序和基数排序的思想与前面基于交换、选择等思想不同,各排序的性能比较如下所示:四、归并排序1、基本思想:归并排序是将俩个或俩个以上的有序表组合成一个新的有序表。假定待排序的表有n个记录,则可以看成是有n个有序的子表,每个子表长度为1,然后俩俩归并,得到[n/2]个长度为2或1的有序表;再俩俩归并,....如此重复,直到合并成一个长度为n的有序表为止,这种排序称为2路归并排序,当原创 2017-03-22 11:14:26 · 386 阅读 · 0 评论 -
程序员必备排序之选择排序、堆排序
选择排序的基本思想是:每一趟在后面的n-i+1个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完。各大排序性能比较:三、选择排序3.1直接选择排序1、基本思想:简单选择排序确实比较简单,其思想就是每次在后面待排序的数组中选择最小的数字放在数组前端。2、代码实现:package sort;public class selectSor原创 2017-03-21 16:30:19 · 310 阅读 · 0 评论 -
程序员必备排序之插入排序、希尔排序
由于最近要找实习单位便在刷算法题,发现许多算法题都涉及到排序的知识所以今天把排序的内容总结一遍备忘。博客中的内容大部分是参考《王道数据结构》内部排序分为几类分别为:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(简单选择排序、堆排序),归并排序和基数排序。各大排序的比较如下图所示:一、插入排序1.1直接插入排序1、思想:基本思想在于原创 2017-03-20 11:34:27 · 375 阅读 · 0 评论 -
剑指offer之字符串字典序全排列
最近在牛客网上刷题,遇到一道剑指offer上的编程题还蛮有意思的,所以把它记录下来与大家分享,原题如下:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba在网上查了以后发现这是一种特定的算法可以解决的问题,该算法称之为字典序全排列算法:非递归算法原创 2017-02-02 15:20:19 · 495 阅读 · 0 评论 -
剑指offer之求二叉树的深度(非递归的层次遍历)Java实现
非递归层次遍历 求解二叉树的深度、最大层数、某层的某个节点问题。原创 2017-02-11 11:11:06 · 1276 阅读 · 0 评论