
数学与算法
文章平均质量分 77
凭江仙
踏踏实实走路,认认真真做人
展开
-
跳表数据结构的C++实现
1、背景 有序链表是一种常用的数据结构,具备链表的优点,不会占用较大的连续内存并且可以实现快速插入,适合频繁插入、更新的应用场景。但是随着节点数目的增多,O(n)的查询复杂度使得性能下降。为了优化查询性能,在原有的数据链表基础上,增加一层至多层逻辑链表,这样的数据结构就成为跳表,可以大大加速有序链表的查询性能。2、代码实现#include <iostream>#include <string>#include <vector>#include..原创 2021-01-28 22:07:35 · 542 阅读 · 0 评论 -
63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题:1、动态规划算法cla原创 2020-07-06 21:27:07 · 659 阅读 · 0 评论 -
模拟退火算法介绍-代码实现
1、爬山算法爬山算法是一种非常简单的贪心算法,它总是从当前解的邻近解中选择最优解作为当前解,直到达到局部最优解。爬山算法的算法过程如下图所示:假设当前解从C点开始,经过若干次的邻近最优解搜索,到达了局部最优解A,此时A的邻近解中没有比当前解更优的,因此爬山算法到此结束,返回的最优解A。很明显,最优解应该是B点处的解,这便是爬山算法最大的弊端:极容易陷入局部最优。2、模拟退火算法...原创 2020-03-16 21:39:02 · 1094 阅读 · 0 评论 -
LeetCode--分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj。如果 sj >= gi,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一...原创 2020-03-13 21:25:59 · 232 阅读 · 0 评论 -
LeetCode--压缩字符串
给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a",...原创 2020-03-06 20:15:38 · 559 阅读 · 0 评论 -
C++ 基于List与Map实现的LRU缓存
常见的缓存淘汰算法有先进先出淘汰算法(FIFO),最近最少使用淘汰算法(LSU),最近最久未使用算法(LRU),MRU(最近最常使用算法)。其中最常用的就是LRU缓存淘汰算法,下面给出代码实现。#include "stdafx.h"#include <iostream>#include <map>#include <list>using name...原创 2020-03-04 21:34:28 · 1405 阅读 · 0 评论 -
LeetCode--路径总和III
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8...原创 2020-03-01 22:07:53 · 203 阅读 · 0 评论 -
LeetCode-左叶子之和
计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-of-left-leaves著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注...原创 2020-02-29 21:54:27 · 377 阅读 · 0 评论 -
LeetCode--判断子序列(简单)
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例1:s ...原创 2020-02-27 22:27:58 · 513 阅读 · 0 评论 -
LeetCode-移动零
难度:简单给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:1、必须在原数组上操作,不能拷贝额外的数组。2、尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes...原创 2020-02-22 22:06:54 · 142 阅读 · 0 评论 -
LeetCode-第一个错误版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用bool isBadVersion(version)接口来判断版本号 version 是否在单元测试中出...原创 2020-02-21 21:07:25 · 248 阅读 · 0 评论 -
LeetCode-缺失数字
给定一个包含 0, 1, 2, ..., n中n个数的序列,找出 0 .. n中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例2:输入: [9,6,4,2,3,5,7,0,1]输出: 8说明:你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?来源:力扣(LeetCode)链接:https://leetcode-cn.com...原创 2020-02-21 20:48:56 · 463 阅读 · 0 评论 -
LeetCode-丑数
编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数2, 3, 5的正整数。示例 1:输入: 6输出: true解释: 6 = 2 ×3示例 2:输入: 8输出: true解释: 8 = 2 × 2 ×2示例3:输入: 14输出: false解释: 14 不是丑数,因为它包含了另外一个质因数7。说明:1、1是丑数。2、输入不会超过 3...原创 2020-02-21 20:28:03 · 264 阅读 · 0 评论 -
LeetCode-二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。示例:输入: 1/ \2 3\ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3来源:力扣(LeetCode)链接:https://leetcode-...原创 2020-02-19 21:13:22 · 261 阅读 · 0 评论 -
LeetCode-回文链表_进阶
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-linked-list著...原创 2020-02-18 21:26:10 · 332 阅读 · 0 评论 -
分布式一致性算法Paxos JAVA多线程方式实现
github地址:https://github.com/hellolinjx/PaxosImpl/// 准备提案过程,获得大多数决策者支持后进入确认提案阶段。 public synchronized boolean prepare(){ PrepareResult prepareResult = null; boolean isContinue = true;原创 2017-10-22 23:29:46 · 2012 阅读 · 0 评论 -
全排列的四种生成算法
1.字典序法 字典序法中,对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列 12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是 54321。字典序算法如下:设P是1~n的一个全排列:p=p1p2.....原创 2015-10-20 21:00:23 · 4719 阅读 · 0 评论 -
用C语言读取前序建立二叉树
今天做编译原理的原创 2014-04-18 23:40:53 · 4241 阅读 · 4 评论