
数据结构与算法Java实现
点滴~
进阶中的工程师
展开
-
算法之刷题汇总
剑指 Offer 题解 | CS-Notes 面试笔记Leetcode 题解 | CS-Notes 面试笔记原创 2025-02-28 23:43:37 · 310 阅读 · 0 评论 -
算法之算法思想
算法思想。原创 2025-02-28 23:36:24 · 149 阅读 · 0 评论 -
算法之排序算法
♥常见排序算法知识体系详解♥ | Java 全栈知识体系算法 - 排序 | CS-Notes 面试笔记十大经典排序算法总结 | JavaGuide原创 2025-02-28 23:34:31 · 299 阅读 · 0 评论 -
算法之算法主题
《程序员数学 v2.0》 | 小傅哥 bugstack 虫洞栈原创 2025-02-28 23:29:14 · 184 阅读 · 0 评论 -
算法之数据结构
目录数据结构数据结构与算法面试题《倚天村 • 图解数据结构》 | 小傅哥 bugstack 虫洞栈♥数据结构基础知识体系详解♥ | Java 全栈知识体系线性数据结构 | JavaGuide数据结构与算法面试题 | 小林coding原创 2025-02-28 23:26:34 · 449 阅读 · 0 评论 -
数据结构算法:红黑树
参考:最容易懂得红黑树参考: 红黑树注:还没好好研究,等有时间了再再说,先记录下来,先把TreeMap大概实现熟悉一下吧!原创 2018-04-19 23:06:52 · 181 阅读 · 0 评论 -
贪心算法
贪心算法介绍贪心算法是指:在每一步求解的步骤中,它要求“贪婪”的选择最佳操作,并希望通过一系列的最优选择,能够产生一个问题的(全局的)最优解。 贪心算法每一步必须满足一下条件: 1、可行的:即它必须满足问题的约束。 2、局部最优:他是当前步骤中所有可行选择中最佳的局部选择。 3、不可取消:即选择一旦做出,在算法的后面步骤就不可改变了。...转载 2018-07-21 14:59:18 · 167 阅读 · 0 评论 -
数据结构与算法
转载 2018-10-01 20:04:50 · 201 阅读 · 0 评论 -
计数排序、桶排序、基数排序
import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Sort { // 打印函数 public static void print(int[] numbers) { for (int i = 0; i < numbers.lengt...原创 2018-11-16 11:09:38 · 229 阅读 · 0 评论 -
图的广度优先遍历算法
前言广度优先遍历算法是图的另一种基本遍历算法,其基本思想是尽最大程度辐射能够覆盖的节点,并对其进行访问。以迷宫为例,深度优先搜索更像是一个人在走迷宫,遇到没有走过就标记,遇到走过就退一步重新走;而广度优先搜索则可以想象成一组人一起朝不同的方向走迷宫,当出现新的未走过的路的时候,可以理解成一个人有分身术,继续从不同的方向走,,当相遇的时候则是合二为一(好吧,有点扯了)。广度优先遍历算法的遍历过程仍然...转载 2018-04-10 13:36:27 · 3972 阅读 · 0 评论 -
图的深度优先遍历算法
前言图的遍历与前面文章中的二叉树遍历还是存在很大区别的。所谓图的遍历指的是从图中的某一个顶点出发访问图中的其余顶点,并且需要保证每个顶点只被访问一次。由于图比二叉树复杂得多,所以前面二叉树的遍历算法在图中是行不通的。因为对于任意一个顶点来讲,都可能与其余的顶点发生连接。如果不对访问的顶点做一些处理,出发重复访问的几率是很高的。因此,一个基本思想是设置一个标记数组,主要用于标记已经被访问过的顶点。图...转载 2018-04-10 13:31:02 · 2228 阅读 · 0 评论 -
二叉树遍历算法之三:后序遍历
后续遍历的递归实现后续遍历指的是先访问节点的左右孩子,最后访问节点本身。所以使用后序遍历得到的结果的最后一个节点就是根节点。采用后续遍历的具体步骤如下:先访问根节点,如果有左孩子,进入第二步;如果有右孩子,进入第三步对左孩子继续判断其是否有左孩子,直到某节点的左孩子为空,设为cur节点对右孩子继续判其是否有左孩子,直到某个节点的左孩子为空,设为curR节点cur节点访问之后,访问其双亲节点的右孩子...转载 2018-04-10 13:18:51 · 534 阅读 · 0 评论 -
常用内部排序算法之一:简单选择排序、直接插入排序和冒泡排序
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;1....原创 2018-04-02 20:06:35 · 5002 阅读 · 0 评论 -
常用内部排序算法之二:快速排序
交换排序—快速排序(Quick Sort)基本思想:1)选择一个基准元素,通常选择第一个元素或者最后一个元素,2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。3)此时基准元素在其排好序后的正确位置4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。快速排序的示例:(a)一趟排序的过程:(b)排序的全过程快...原创 2018-04-02 21:25:35 · 235 阅读 · 0 评论 -
常用内部排序算法之三:堆排序
选择排序—堆排序(Heap Sort)堆排序是一种树形选择排序,是对直接选择排序的有效改进。基本思想:堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。若以一维数组存储一个堆,则堆对应一棵完全二叉树,且所有非叶结点的值均不大于(或不小于)其子女的值,根结点(堆顶元素)的值是最小(或最大)的。如:(...原创 2018-04-02 22:37:44 · 297 阅读 · 0 评论 -
常用内部排序算法之四:归并排序
归并排序(Merge Sort)基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序示例: 合并方法:设r[i…n]由两个有序子表r[i…m]和r[m+1…n]组成,两个子表长度分别为n-i +1、n-m。j=m+1;k=i;i=i; //置两个子表的起始下标及辅助数组...原创 2018-04-02 22:50:34 · 288 阅读 · 0 评论 -
常用内部排序算法之五:希尔排序
插入排序—希尔排序(Shell`s Sort)希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进。希尔排序又叫缩小增量排序基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。操作方法:选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;按增量序列个数k,对序列进行...原创 2018-04-02 22:55:28 · 270 阅读 · 0 评论 -
二分查找算法及其变种
前言二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法。其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功;若给定的值小于中间记录的关键字,则在中间记录的左半区间继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区间继续查找;不断重复这个过程,直到查找成功。否则查找失败。这个思想与孔子中的中庸思想和相似。二分查找算法的实现基...转载 2018-04-10 12:34:30 · 206 阅读 · 0 评论 -
二叉树遍历算法之一:前序遍历
递归实现前序遍历二叉树的前序遍历是指从根节点出发,按照先根节点,再左子树,后右子树的方法遍历二叉树中的所有节点,使得每个节点都被访问一次。当调用遍历算法的时候前序遍历的具体过程如下:首先访问根节点,如果根节点不为空,执行输出语句,打印根节点的值。 如果左子树不为空,则访问根节点的左孩子,并输出根节点做孩子的值 继续访问根节点的左孩子的左孩子,如果不为空则继续输出该左孩子的值; 如...转载 2018-04-10 13:13:50 · 1453 阅读 · 0 评论 -
二叉树遍历算法之二:中序遍历
中序遍历的递归实现中序遍历遍历指的是先访问二叉树中节点的左孩子,再访问当前节点,最后再访问其右孩子。具体访问步骤如下:首先访问根节点,判断根节点是否有左孩子,如果有,进行第二步;如果没有,跳到第三步;访问左孩子,继续判断当前节点是否有左孩子,如果有则继续访问其左孩子,直到某节点的左孩子为空判断是否有右孩子,如果有,则继续判断当前节点是否有左孩子,一直到某节点没有左孩子为止把第二步访问的节点做为当前...转载 2018-04-10 13:16:10 · 409 阅读 · 0 评论 -
数据结构基础
在Java研发工程师招聘中,数据结构与算法是必考科目。昨天看了李开复的文章《算法的力量》以后,陷入了沉思。虽然之前被各种算法题目虐,但是还是觉得很有意思,一个算法的优化,可以带来大数据量或者高并发下的运算速度的成倍增加。算法作为“内功”,是成为高手必不可少的。正如李开复说的:“编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离...转载 2018-04-02 18:18:50 · 155 阅读 · 0 评论