算法和数据结构
土豆钊
求知若渴,大智若愚
展开
-
插入区间(leetcode)
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。按照区间起始端点排序的区间列表。原创 2023-06-24 17:50:51 · 162 阅读 · 0 评论 -
盛最多水的容器
轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。原创 2023-06-24 16:39:34 · 116 阅读 · 0 评论 -
匈牙利算法-看这篇绝对就够了!
本文讲述的是匈牙利算法,即图论中寻找最大匹配的算法,暂不考虑加权的最大匹配(用KM算法实现),文章整体结构如下:基础概念介绍 算法的实现好的,开始!一. 部分基础概念的介绍我会严格介绍其定义,并同时用自己的大白话来重述。概念点1. 图G的一个匹配是由一组没有公共端点的不是圈的边构成的集合。这里,我们用一个图来表示下匹配的概念:如图所示,其中的三条边即该图的一个匹配;...原创 2019-05-31 17:40:07 · 163307 阅读 · 55 评论 -
白话讲排序系列(二) 冒泡排序
原理,参考自数据结构(C语言版)严蔚敏:首先,对于一个无序数列,每一趟排序,都会有一个最大的元素沉到水底。从上图中可以看出,每经过一趟排序,最大的记录都会到达序列的末端,这是每一趟冒泡排序的过程,需要达到的目的,下面,探讨过程,如何才能每一趟实现这个目标。条件:需要排序的序列:49 38 65 97 76 13 27 49排序的目标:无序数列成为升序数列冒泡排序过程中,为了实现该目标,在每一趟排序...原创 2018-03-06 17:43:34 · 616 阅读 · 0 评论 -
白话讲排序系列(一) 直接插入排序
直接插入排序的基本思想,就是:每次将一个待排序的记录,将其按照关键字大小插入到前面已经排好序的子序列中的适当位置,知道全部记录插入完成为止。算法的思想,可以参照平时玩纸牌的时候(来源于算法导论的例子),我们拿到第一张牌,本身就是有序的,第二张牌与第一张牌比较下,看大小,决定放在第一张牌的前面还是后面。如果手里已经有了N张牌,然后取了第N+1张牌,这张牌从最后面与前面的牌进行比较,如果大,则就放在第...原创 2018-03-06 16:44:07 · 517 阅读 · 0 评论 -
树与二叉树系列(一)
本文,记录下树常见的一些操作,纯代码文章:通常,认真掌握树的遍历的方式,对于树的一些算法,基本都可以迎刃而解了。package tree.binarytree;import java.util.LinkedList;public class TreeTraverse { public static void main(String[] args) { TreeNode root = ...原创 2018-03-18 22:21:36 · 234 阅读 · 0 评论 -
线性表(一)
为了学习好数据结构,准备把书上的算法都亲自敲一遍,每天都要敲一些,是对自己的承诺吧。1:已知一个线性表,其中的元素递增有序排列,设计一个算法,插入一个元素x(int型);保证该顺序表依然递增有序排列,这里,假设每次都能够插入成功:解答:线性表分为两种,数组和链表;这道题,其实就是插入排序的一部分逻辑。package linetable;public class InsertElement { ...原创 2018-03-16 23:01:43 · 295 阅读 · 0 评论 -
土豆面试系列(三)
开门见山!***************************************************************1:如何最有效率地计算2*8?很老的一道题了,直接左移三位,即2<<3;利用二进制,移位操作,这是最快的方式;移位可比普通的四则运算速度快。2:请简单介绍下,JVM加载类的机制?这个问的不多,但大点的公司对于底层要求还是比较严的,在此参考周志明的那本书...原创 2018-03-15 23:31:08 · 371 阅读 · 1 评论 -
白话讲排序系列(六) 堆排序(绝对让你明白堆排序!)
开门见山,本文讲述堆排序。就我自身对于排序的了解来看,其实堆排序是诸多排序中最难写的,光是理解起来都有点费劲,本文旨在于用通俗易懂的话,把堆排序娓娓道来。下面,开始!1:堆毫无疑问,排序两个字没必要去死磕,这里的重点,在于排序的方式,堆排序,就是以堆的形式去排序,毫无疑问,了解堆很重要。那么,什么是堆呢?这里,必须引入一个完全二叉树的概念,然后过渡到堆的概念。上图,...转载 2018-03-09 15:42:15 · 67365 阅读 · 34 评论 -
白话讲排序系列(五) 归并排序
如何用最通俗易懂的话把归并排序说明白,这是个问题,本文只是做尝试;如果讲得不好,还请大家批评;如果讲得好,欢迎评论,转载。好的,废话少说,开讲!归并,之所以叫归并,就是算法的核心在于归并上;这就好比冒泡排序算法的核心,在于冒泡;选择排序的算法,核心在于从待排序的队列中选择出合适的数字一样。(1):归并,既然是并;那至少得是两个数列吧?是不是?要不然一个巴掌拍不响啊!既然是两个数列,那么,最最简单的...原创 2018-03-08 14:32:26 · 696 阅读 · 0 评论 -
白话讲排序系列(四)选择排序
开门见山,本文讲述一下选择排序的原理,后附代码:1:什么是选择排序?选择排序,重在选择二字,拿出来与冒泡排序对比下,可能更好地理解这个选择排序的处理逻辑。在冒泡排序中,每一趟都要保证排序序列中的最大数字,到整个数列的一端,比如说按照升序排序的话,最大数字会跑到整个数列的最右边;而冒泡排序每一趟是怎么做才达到目标的呢?交换,从待排序列的最左端一直交换,如此,最大值就交换到了最右边;循环往复,排序效果...原创 2018-03-07 22:56:03 · 394 阅读 · 0 评论 -
白话讲排序系列(三) 快速排序
同冒泡排序一样,快速排序属于交换类排序,但是,因为加入了分而治之的思想,快速排序的平均复杂度可以达到O(nlogn);本文将用大白话讲述一下快速排序的实现原理;同样,末尾将附上完整可行的快速排序算法代码(Java版本)。注:文中有些图可能来自于其他链接,会在文末附上。为了方便介绍快速排序的整体思想,这里先定义一个数组:int[] array = new int[] { 45, 38, 65, 97...原创 2018-03-06 23:13:24 · 660 阅读 · 0 评论