LeetCode 763. Partition Labels

题目描述 题目链接 思路 显然,如果整个字符串无重复值,那么字符串的字符个数就是最多划分的区间个数。 如果有重复值,假设a字符有重复,那么所有的a必须划分到同一个区间内,否则a分布不同区间的话,就不满足题目要求了。 同理,其他字符也是类似的逻辑。 我们的整体流程是从左往右遍历字符,当遍历到一个字符的 ... »

greyzeng

数据结构与算法——贪心算法

应用场景-集合覆盖问题 贪心算法可以解决很多场景的问题,这里以集合覆盖问题为例。 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号? 广播台 覆盖地区 K1 "北京", "上海", "天津" K2 "广州", "北京", "深圳" K3 ... »

剑指 Offer 56 - II. 数组中数字出现的次数 II

剑指 Offer 56 - II. 数组中数字出现的次数 II 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums = [3,4,3,3] 输出:4 示例 2: 输入:nums = [9,1,7,9,7,9,7] 输出:1 ... »

线段树

要解决的问题 数组任意区间内的元素修改,增加,求和,时间复杂度都要达到O(logN)水平, 方法说明如下 L...R上都加V void add(L, R, V, arr) L...R上的值都更新成V void update(L, R, V, arr) L...R上求和并返回求和信息 int quer ... »

greyzeng

剑指 Offer 56 - I. 数组中数字出现的次数

剑指 Offer 56 - I. 数组中数字出现的次数 一个整型数组nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1] 示例 2: ... »

RainsX

剑指 Offer 44. 数字序列中某一位的数字

剑指 Offer 44. 数字序列中某一位的数字 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。 请写一个函数,求任意第n位对应的数字。 示例 1: 输入:n = 3 输出:3 示例 ... »

KMP算法解决字符串匹配问题

要解决的问题 假设字符串str长度为N,字符串match长度为M,M <= N, 想确定str中是否有某个子串是等于match的。返回和match匹配的字符串的首字母在str的位置,如果不匹配,则返回-1 OJ可参考:LeetCode 28. 实现 strStr() 暴力方法 从str串中每个位置开 ... »

greyzeng

密码学系列之:Argon2加密算法详解

简介 Argon2是一个密钥推导函数,在2015年7月被选为密码哈希大赛的冠军,它由卢森堡大学的Alex Biryukov、Daniel Dinu和Dmitry Khovratovich设计,Argon2的实现通常是以Creative Commons CC0许可(即公共领域)或Apache Lice ... »

使用manacher算法解决最长回文子串问题

要解决的问题 求一个字符串最长回文子串是什么。且时间复杂度 O(N) 具体描述可参考: LeetCode_5_最长回文子串 LintCode_200_最长回文子串 暴力解法 以每个字符为中心向左右两边扩,直到扩不动为止,记录下每个字符对应能扩的范围大小。因为有每个位置左右两边能扩的最大范围,我们可以 ... »

greyzeng

重学数据结构和算法(五)之归并排序、快速排序

最近学习了极客时间的《数据结构与算法之美》很有收获,记录总结一下。 欢迎学习老师的专栏:数据结构与算法之美 代码地址:https://github.com/peiniwan/Arithmetic 归并排序(Merge Sort) 冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是 O( ... »

算法复杂度分析

复杂度分析 ​ 算法的复杂度指的是执行该算法的程序在运行时所需要的时间和空间(内存)资源,复杂度分析主要是从时间复杂度和空间复杂度两个层面来考虑。 大O(big O)表示法 ​ 在了解时间复杂度之前,我们需要知道怎么用数学符号将它表示出来。 ​ 我们知道,一个算法的执行时间 = 该算法中每条语句执行 ... »

forever-Ys 算法

蓄水池算法

要解决的问题 假设有一个源源吐出不同球的机器, 只有装下10个球的袋子,每一个吐出的球,要么放入袋子,要么永远扔掉,如何做到机器吐出每一个球之后,所有吐出的球都等概率被放进袋子里 规则 吐出1到10号球,完全入袋, 引入随机函数f(i),提供一个值i,等概率返回1-i的一个数字, 当K号球吐出的时候 ... »

greyzeng

数据结构与算法-基础(三)- 循环链表(补充)

上一期整体探讨了一下单向链表。在这基础上补充两个点,分别是单向循环链表和双向循环链表。从字面中可以看出是将链表形成个环结构,区别在于这个环是只能一个方向还是两个方向循环。 单向循环链表 单向循环链表可以理解为将单向链表的最后一个节点指向第一个节点,将链表形成一个环。那么由单向循环链表处理的数组数据接 ... »

shsuper

分组密码(三)DES 算法— 密码学复习(六)

在介绍完Feistel结构之后,接下来进入到著名的DES算法。 6.1 DES算法的意义 在正式介绍DES之前,首先介绍几个重要的历史时间节点。 ① 1973年,美国国家标准局(NBS)向社会公开征集加密算法,一直盯加密算法标准。 ② 1974年,第二次征集。 ③ 1975年,选中IBM的算法,公布 ... »

剑指 Offer 46. 把数字翻译成字符串

剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例 1: 输入: 1 ... »

数据结构与算法——平衡二叉树(AVL树)

二叉排序树存在的问题 一个数列 {1,2,3,4,5,6},创建一颗二叉排序树(BST) 创建完成的树如上图所示,那么它存在的问题有以下几点: 左子树全部为空,从形式上看,更像一个单链表 插入速度没有影响 但查询速度明显降低 因为需要依次比较,不能利用二叉排序树的折半优势。而且每次都还要比较左子树, ... »

剑指 Offer 60. n个骰子的点数

剑指 Offer 60. n个骰子的点数 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 示例 1: 输入: 1 输出: [0.16667 ... »