![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 50
Stepfen Shawn
dijkstra的小弟
展开
-
深入算法: leetcode862: 如何使用双端队列从O(n^2)优化到O(n)?
由前缀和的性质可以知道, 如果该区间的和至少为k, 假设我们已经找到了前缀和pre[i] - pre[j] >= k, 那么此时i-j就是我们的最小区间, 因为如果存在i’ > i, 使得pre[i’] - pre[j]也成立, 那么有i’-j>i-j, 所以i’-j不是我们要找的最小区间。回到题目上, 我们要用双端队列对循环进行优化, 我们需要进行。输入:nums = [2,-1,2], k = 3。输入:nums = [1,2], k = 4。输入:nums = [1], k = 1。原创 2022-10-26 16:02:18 · 346 阅读 · 1 评论 -
1624. 两个相同字符之间的最长子字符串
给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1。解释:最优的子字符串是 “abba” ,其他的非最优解包括 “bb” 和 “”。解释:s 中不存在出现出现两次的字符,所以返回 -1。解释:最优的子字符串是两个 ‘a’ 之间的空子字符串。子字符串 是字符串中的一个连续字符序列。解释:最优的子字符串是 “bc”。输入:s = “cabbac”输入:s = “cbzxy”输入:s = “abca”输入:s = “aa”原创 2022-09-17 09:44:12 · 129 阅读 · 0 评论 -
算法学习笔记: Python实现BF字符串匹配算法
算法原创 2022-09-08 22:39:43 · 329 阅读 · 0 评论 -
深入算法:从0开始证明欧几里得算法
算法原创 2022-09-05 10:30:14 · 171 阅读 · 0 评论 -
信息论学习笔记(二):离散无噪声系统
通信原理原创 2022-09-02 18:01:21 · 789 阅读 · 1 评论 -
信息论学习笔记(一):认识通信系统
信息论原创 2022-09-01 23:57:09 · 377 阅读 · 0 评论 -
算法导论学习笔记(一): 插入排序
伪代码insertion-sort(A) for j = 2 to length[A] do key = A[j] # insert A[j] into the sorted sequence A [1 .. j -1] i = j - 1 while i > 0 and A[i] > key do A[i + 1] = A[i] i = i + 1 A[i + 1] = key证明插入算法的正确性要证明插入算法的正确性,首先要证明循环不变式:也就原创 2021-02-28 17:30:34 · 187 阅读 · 0 评论 -
leetcode:贪心算法:你可以获得的最大硬币数目
有 3n 堆数目不一的硬币,你和你的朋友们打算按以下方式分硬币:每一轮中,你将会选出 任意 3 堆硬币(不一定连续)。Alice 将会取走硬币数量最多的那一堆。你将会取走硬币数量第二多的那一堆。Bob 将会取走最后一堆。重复这个过程,直到没有更多硬币。给你一个整数数组 piles ,其中 piles[i] 是第 i 堆中硬币的数目。返回你可以获得的最大硬币数目。示例 1:输入:piles = [2,4,1,2,7,8]输出:9解释:选出 (2, 7, 8) ,Alice 取走 8 枚原创 2020-08-28 10:34:24 · 537 阅读 · 0 评论 -
算法学习笔记: 贪心算法
贪心算法的基本思路(1)建立数学模型来描述问题;(2)把求解的问题分成若干个子问题;(3)对每一子问题求解,得到子问题的局部最优解;(4)把子问题的局部最优解合并成原来解问题的一个解。实现过程(1)从问题的某一初始解出发;(2)while能向给定总目标前进一步;(3)求出可行解的一个解元素;(4)由所有解元素组合成问题的一个可行解。装箱问题假设有编号分别为0,1,…,n-1的n种物品,体积分别为V0,V1,…,Vn-1。将这n种物品装到容量都为V的若干箱子里。约定这n种物品的体积均不超原创 2020-08-24 13:48:38 · 164 阅读 · 0 评论 -
算法学习笔记: 递推
两种递推算法顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如斐波那契数列就可以通过顺推法不断递推算出新的数据。逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。顺推法经典的兔子问题可以用顺推法解决:#include <stdio.h>#define NUM 13int main(){ int i; //保存兔子的初始数据和每月的总数 long fib[NUM] = {1,1}; //顺推每个月的总数 for(i=2;i<原创 2020-08-23 16:49:39 · 139 阅读 · 0 评论 -
GC学习笔记(一):GC中的基本概念
一般来说,对象都是头(header)和域(field)构成。头对象中保存本身信息的部分称为头。它主要包括以下内容:对象的大小对象的种类域对象使用者在对象中可访问的部分称域,例如C语言中结构体的成员,对象会引用或替换对象的赋值。另一方面,对象使用者基本无法直接改变头的信息。域中的数据类型大致分为以下2种:指针非指针指针是指向内存空间中某块区域的值。非指针指的是在编程中直接使...原创 2020-04-16 09:31:20 · 934 阅读 · 0 评论 -
Dart实现二叉堆
定义与原理二叉堆是一种特殊的堆。具有如下的特性:具有完全二叉树的特性堆中的任何一个父节点的值都大于等于它左右孩子节点的值,或者都小于等于它左右孩子节点的值二叉堆分为两类:最大堆父节点的值大于等于左右孩子节点的值最小堆父节点的值小于等于左右孩子节点的值堆顶:二叉堆的根节.二叉堆的三个主要操作:插入一个节点。删除一个节点。构建一个二叉堆。在二叉堆这种结构中,...原创 2020-04-15 10:43:40 · 200 阅读 · 0 评论 -
Dart实现数组栈
用Dart写一个数组栈class ArrayStack{ //stack List stack; //element of the stack int count; //size of stack int n; //Init the array stack ArrayStack(var n){ this.n = n; this.stack =...原创 2020-04-15 09:04:58 · 633 阅读 · 0 评论