![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
易明雨
这个作者很懒,什么都没留下…
展开
-
【数据结构与算法】插入排序
假设数组a[N]已经排好序,现在需要插入一个新的数。假设我们将数插入某个位置,那么这个位置之后的所有元素都必须后移一位。 public static void straightInsertSort(int[] nums,int start,int end){ if(nums==null||nums.length<=end) throw new IllegalArgumentExceptio原创 2016-11-10 15:16:32 · 261 阅读 · 0 评论 -
【剑指offer】包含min函数的栈
首先第一个想到用一个临时变量何存当前栈中的最小值。每次入栈时,先比较入栈元素与当前最小值确定是否更新。但是如果此时出栈一个元素,并且栈内不为空时,min函数就无法工作了。也就是说我们必须保存入栈前的最小值序列,以保证出栈后能恢复最小值。很容易想到也用一个栈来保存最小值。public class原创 2016-11-18 17:36:53 · 220 阅读 · 0 评论 -
【数据结构与算法】快速排序
快速排序也使用了分治策略,它每次将待排序列分成两部分,前一部分的元素值都不比后一部分的元素值大。也就是前一部分都不比某个数大,后一部分都不比这个数小。这个基准的选择会直接影响快速排序的效率。 划分 固定第一个数为基准,以{5,4,3,5,6,12,11,-3,4,5,7}为例,用临时变量保存5,相当于挖了个坑,然后从后往前找到第一个小于基准的数,填入当前坑,原位置形成新坑,然后从前往后找到第一原创 2016-11-15 15:27:55 · 338 阅读 · 0 评论 -
【剑指offer】按层和按之字打印二叉树
用两个栈实现按之字形打印二叉树原创 2016-12-02 12:47:11 · 337 阅读 · 0 评论 -
【剑指offer】整数数组中重复的数字
数组a[n]中所有的数字都在[0,n)内,此O(n)方法可以找出所有重复的数值并不修改原数组原创 2016-12-02 13:09:34 · 313 阅读 · 0 评论 -
【剑指offer】二叉搜索树转有序双向链表
这一题实际上就是中序遍历二叉树,并且修改指针。原创 2016-11-21 12:07:57 · 221 阅读 · 0 评论 -
【数据结构与算法】字符串匹配算法
字符串匹配算法:KMP、BM和Sunday原创 2017-01-03 10:41:45 · 3641 阅读 · 0 评论 -
【Leetcode】两个有序数组的中位数
两个有序数组的中位数二分查找法详细理解原创 2016-12-23 00:18:32 · 6713 阅读 · 0 评论 -
【剑指offer】计算1至n中整数k出现的次数
计算1至n中整数k(包括0)出现的总次数原创 2016-12-19 15:02:23 · 863 阅读 · 0 评论 -
【数据结构与算法】单链表排序
以前一直没有考虑过对单链表的排序,直到遇到Leetcode 一、快速排序 单链表的快速排序需要用到快速排序的单向扫描法,总体思路是用一快一慢两个指针,快指针用来寻找小于key的结点,慢指针用来指向当前找到的较小结点应该存储的位置。 public static int partition(int[] nums,int start,int end){ int fast=star原创 2016-12-19 21:01:47 · 798 阅读 · 0 评论 -
【数据结构与算法】实现四则运算
利用位移操作实现整数的加减乘除原创 2016-12-29 16:40:10 · 1802 阅读 · 0 评论 -
【剑指offer】顺时针打印矩阵
主要思想是递归打印最外面一圈,打印每一圈时按照顺时针方法,先顶部从左至右,然后右边从上至下,然后底部从右至左,最后左边从下至上。 思路简单,但是实现起来困难,主要是打印次数的判断,以及矩阵只有一行或只有一列或只有一个数时的判断条件。原创 2016-11-18 16:48:33 · 293 阅读 · 0 评论 -
【剑指offer】二叉树的子树
二叉树的子树原创 2016-11-18 14:44:05 · 297 阅读 · 0 评论 -
【剑指Offer】反转单链表
反转单链思路简单,但是需要仔细实现,不能遗漏细节,不自己独立写一遍永远不知道自己错在哪。 public static ListNode reverseList(ListNode head) { if(head==null) return null; ListNode pre=null; ListNode cur=head; Lis原创 2016-11-18 11:28:31 · 326 阅读 · 0 评论 -
【数据结构与算法】二分查找
二分查找的思想是在已经排序(升序)的数组中,如果要查找的数比中位数小,那么其位置只可能在左半部分,相反只能在右半部分。这样每次把查找区间缩小一半,比顺序查找效率快得多。非递归写法: public static int binarySearchInAscLooply(int[] nums,int start,int end,int t){ if(nums==null||nums.leng原创 2016-11-11 11:30:30 · 460 阅读 · 0 评论 -
【数据结构与算法】希尔排序
希尔排序又称缩小增量排序,实质上是分组直接插入排序。原创 2016-11-11 15:19:04 · 380 阅读 · 0 评论 -
【数据结构与算法】堆排序
【数据结构与算法】堆排序1、堆的性质 2、堆的调整规则3、堆的建立4、堆排序原创 2016-11-11 21:12:19 · 329 阅读 · 0 评论 -
【数据结构与算法】冒泡排序
冒泡排序的思想是,从前往后(或从后往前)扫描,每找一个逆序对,就将它更正过来,这样每一轮总可以找到一个最大值或最小值。原创 2016-11-11 21:42:18 · 408 阅读 · 0 评论 -
【数据结构与算法】选择排序
选择排序的思想是每次从未排序数组中选出最小或最大的数,与当前待插入位置交换。原创 2016-11-11 21:50:47 · 416 阅读 · 0 评论 -
【数据结构与算法】计数排序
计数排序只适用于分布较密的整数,它的思想是将元素当作辅助数组的下标,对应的值代表元素出现的次数。因为数组下标从小到大不需要排序,即而当前下标和之前下标的次数累加和即此下标在原数组中的位置。 注意:当数组元素分布广泛时会造成极大的空间浪费。传入参数min和max是数组中的最小值和最大值,如果不知道,可以传入一个大概的值,只要分别比实际最小值小和实际最大值大就行 public static in原创 2016-11-11 22:20:49 · 442 阅读 · 0 评论 -
【数据结构与算法】桶排序
桶排序的思想是划分区间(桶),后一个区间中的数总是比前一个区间的大。例如按薪水排序,处于月薪数W元区间的任何一个人的薪水肯定比处于月薪数K元区间的所有人多。 分好区后,再选择某一种算法对这个区内的元素排序。最后根据区的优秀级依次取出元素,这样整个序列就有序了。原创 2016-11-16 11:08:28 · 426 阅读 · 0 评论 -
【数据结构与算法】基数排序
基数排序是一种多关键字排序。以扑克牌排序为例,每张扑克牌有两个“关键码”:花色和面值,花色的权重大于面值,如红桃A小于黑桃2。 通常有最高位优先MSD (Most Significant Digit first)和最低位优先LSD (Least Significant Digit first)两种实现方式。原创 2016-11-16 22:09:47 · 750 阅读 · 0 评论 -
【数据结构与算法】归并排序
归并排序的利用了分治的思想,将待排序列分为前后部分,分别进行归并排序,然后将这两个有序的部分合并使之达到整体有序。 合并 因为两个待合并子序列都是已经排序的,它们的第一个值在其序列中永远是最小(最大)的,故而整体最小(最大)的值必然是这两个中的一个,就像年级的第一名,永远是从各班的第一名中产生。 因而我们可以每次比较两个待合并序列的第一个,选取其中一个值放入到结果中,并从原序列中移除。原创 2016-11-14 10:44:49 · 405 阅读 · 0 评论 -
【剑指offer】队列和栈的互相实现
队列先进先出,栈先进后出。 两个栈实现队列,两个队列实现栈原创 2016-11-17 15:05:06 · 336 阅读 · 0 评论 -
【数据结构与算法】二叉树的遍历
二叉树的三序遍历、层次遍历、分层遍历和按之字形遍历原创 2016-12-20 13:10:22 · 399 阅读 · 0 评论