
算法
cocohao715
这个作者很懒,什么都没留下…
展开
-
[leetcode]1230. 抛掷硬币
有一些不规则的硬币。在这些硬币中,prob[i] 表示第 i 枚硬币正面朝上的概率。请对每一枚硬币抛掷 一次,然后返回正面朝上的硬币数等于 target 的概率。示例 1:输入:prob = [0.4], target = 1输出:0.40000示例 2:输入:prob = [0.5,0.5,0.5,0.5,0.5], target = 0输出:0.03125题解:此题用动态规划,状态方...原创 2020-03-13 18:37:53 · 457 阅读 · 0 评论 -
蚂蚁感冒
蚂蚁感冒问题描述数据格式题解代码问题描述长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。数据格式第一行输入一个整数n (1 <...原创 2018-12-01 15:51:48 · 252 阅读 · 0 评论 -
拓扑排序
拓扑排序定义拓扑排序思想示例定义对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。拓扑排序思想在一个有向图中找一个拓扑序列的过程称为拓扑排序从有向图中找一个没有前驱,即入度为0的顶点,输出这个顶点的编号。从图中删去这个顶点,并且删除从该顶点出发的所有有向边。重复...原创 2018-11-06 16:21:25 · 612 阅读 · 0 评论 -
【剑指offer】从尾到头打印链表
【剑指offer】从尾到头打印链表问题描述解析代码问题描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解析看到这问题,第一反应是递归调用,但是递归如果太深入就会产生栈溢出。所以更改成java里面有个栈的数据结构类型——Stack。代码import java.util.ArrayList;import java.util.Iterator;import java...原创 2018-10-23 15:38:27 · 145 阅读 · 0 评论 -
【剑指offer】替换空格
【剑指offer】替换空格题目描述解析代码题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解析这道题要考虑两种情况对原字符串不进行任何操作,创建一个新的字符串进行添加操作。在原字符串进行操作:首先遍历一下字符串数出空格的数量,对字符串进行扩容从后面遍历到前面,...原创 2018-10-23 15:05:35 · 203 阅读 · 0 评论 -
【剑指offer】二维数组中的查找
【剑指offer】二维数组中的查找题目描述解析策略代码题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解析因为该数组是有规律的,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。因此可以用到一种策略。策略1.找出...原创 2018-10-21 17:55:28 · 357 阅读 · 0 评论 -
【剑指offer】不修改数组找出重复的数字
题目描述不修改数组找出重复的数字。在一个长度为n+1的数组中的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。在不修改输入数组的情况下找出数组中任意一个重复数字。例如输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},则对应输出的是2或者3。解析本题目有三种策略,一种利用哈希表、一种是利用下标的位置交换元素,这两种策略与【数组中重复的数字】一样。这里说例外一种。...原创 2018-10-21 16:48:00 · 240 阅读 · 0 评论 -
【剑指offer】数组中重复的数字
数组中重复的数字题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解析用时间换空间的方法,哈希表解决。遍历整个数组将其放入hashmap中,判断hashmap中是否...原创 2018-10-21 16:21:49 · 358 阅读 · 0 评论 -
直接选择排序
选择排序选择排序(Selection sort)是一种简单直观的排序算法。工作原理每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。实现代码//直接选择排序 public static void selectSort(Comparable[] arr) { for (int i...原创 2018-10-10 15:00:54 · 2333 阅读 · 0 评论 -
堆排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,...原创 2018-10-10 14:41:34 · 135 阅读 · 0 评论 -
冒泡排序
冒泡排序冒泡排序算法的原理如下:代码实现冒泡排序算法的原理如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码实现 //冒泡排序 public sta...原创 2018-10-10 14:31:15 · 125 阅读 · 0 评论 -
SPFA 算法详解( 强大图解,不会都难!)
转载 2018-02-08 16:18:09 · 2387 阅读 · 3 评论 -
数据结构--Dijkstra算法最清楚的讲解
转载 2018-02-09 02:09:03 · 846 阅读 · 1 评论