算法
文章平均质量分 77
Yawn__
“就像热爱漫无边际。”
展开
-
算法——二叉树的遍历
0. 二叉树定义 Definition for a binary tree node. public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) {原创 2021-07-23 15:56:58 · 128 阅读 · 0 评论 -
数据结构——邻接矩阵/邻接表
1. 图图是一种非线性数据结构,由「节点(顶点)vertex」和「边 edge」组成,每条边连接一对顶点。根据边的方向有无,图可分为「有向图」和「无向图」。本文 以无向图为例开展介绍。如下图所示,此无向图的 顶点 和 边 集合分别为:顶点集合: vertices = {1, 2, 3, 4, 5}边集合: edges = {(1, 2), (1, 3), (1, 4), (1, 5), (2, 4), (3, 5), (4, 5)}表示图的方法通常有两种:邻接矩阵邻接表2. 邻接矩阵原创 2021-07-20 09:39:35 · 4734 阅读 · 0 评论 -
Leetcode——在排序数组中查找数字 I(二分查找)
1. 题目统计一个数字在排序数组中出现的次数。2. 题解解法一:把数字与数字出现次数存入map最后输出target存在次数即可是真滴慢class Solution { public int search(int[] nums, int target) { int count = 0; if(nums == null || nums.length == 0) return 0; int len= nums.原创 2021-07-16 15:56:10 · 172 阅读 · 0 评论 -
常见排序算法
0. 概述排序算法可以分为内部排序和外部排序:内部排序是数据记录在内存中进行排序。外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。1. 直接插入排序通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了要给插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序默认从第二个数原创 2021-07-07 18:47:58 · 213 阅读 · 0 评论 -
数据结构——B树,B+树,平衡树,红黑树
1. B树B树也称B-树,它是一颗多路平衡查找树。二叉树我想大家都不陌生,其实,B树和后面讲到的B+树也是从最简单的二叉树变换而来的,并没有什么神秘的地方,下面我们来看看B树的定义。每个节点最多有m-1个关键字(可以存有的键值对)。根节点最少可以只有1个关键字。非根节点至少有m/2个关键字。每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同。每个节点都存有索引和原创 2021-06-17 15:41:32 · 2519 阅读 · 2 评论 -
算法——0/1背包问题
0-1背包问题:给定n种物品和一背包。物品 i 的重量似乎 wi,其价值为 vi,背包的容量为 c。问应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?0/1背包,即物体只能整个放入或者整个不放入。题目:假设你是一个小偷,背着一个可装下4磅东西的背包,你可以偷窃的物品如下:为了让偷窃的商品价值最高,你该选择哪些商品?最简单的算法是:尝试各种可能的商品组合,并找出价值最高的组合。这种算法的运行时间是O(2ⁿ),真的是慢如蜗牛。让我们来看看动态规划:对于背包问题,你先解决小背包(子背转载 2021-06-03 16:55:43 · 2679 阅读 · 0 评论 -
算法——动态规划浅析
1. 什么是动态规划动态规划就是把一个大问题拆解成一堆小问题,但是,一个“大问题”之所以能用动态规划解决,并不是因为它能拆解成一堆小问题,事实上不是所有的大问题都能拆分为小问题一个问题能否用动态规划解决,主要取决于该问题拆解的“小问题”会不会被重复调用...原创 2021-06-02 16:11:31 · 467 阅读 · 0 评论