KMP算法 算法简介 KMP算法解决的问题主要在于如何实现在一个较长的字符串中匹配得到一个较短的字符串。 我们知道对于子串匹配的问题,常用的暴力解法是不断枚举起点,并反复遍历字符串以确定是否匹配,而KMP算法则可以简化这一个过程。该算法可以自动跳过一些可能会导致重复匹配的字符串从而减少匹配的次数。 2021-06-30 #算法学习 #AcWing
AcWing 3580.整数配对 题目详情 给定 \(n\) 个整数 \(a_1,a_2,…,a_n\), \(n\) 为偶数。 现在要将它们两两配对,组成 \(n2\) 个数对。 \(ai\) 和 \(a_j\) 能够配对,当且仅当 \(a_i=a_j\)。 每次增加操作可以使其中的任意一个数 \(a_i\) 加一。 请问,要使得 \(n\) 个整数能够成功组成 \(\frac{n}{2}\) 个数对,至少要进行多少次增加操作。 2021-05-27 #算法学习 #AcWing
多重背包系列问题 问题简介 多重背包问题相对于完全背包问题最大的区别在于多重背包问题中每个物品的数量是有限的,但是二者的状态转移方程相同,故其可以由完全背包问题改写而来。 但是直接改写而来的朴素版本的完全背包问题本身无法应对较大的数据范围,故需要适当进行优化,本文便是针对该类常规的多重背包问题进行解答。 2021-05-23 #算法学习 #AcWing
AcWing 532. 货币系统 题目描述 在网友的国度中共有n种不同面额的货币,第 i 种货币的面额为a[i],你可以假设每一种货币都有无穷多张。 为了方便,我们把货币种数为n、面额数组为a[1..n]的货币系统记作(n,a) 。 在一个完善的货币系统中,每一个非负整数的金额 x 都应该可以被表示出,即对每一个非负整数 x,都存在 nn 个非负整数 t[i] 满足 a[i]*t[i] 的和为 x。 然而,在网友的国度中,货币系 2021-05-22 #算法学习 #AcWing
从零开始的Rust生活:03-控制流与逻辑运算符 前言 作为一款合格的程序语言,基本的控制语句是必须有的,而对于Rust来说她的控制流语句相对于传统的语言来说都要更为丰富,本文将会大体地介绍Rust的各类控制语句及其的基本用法。 2020-11-27 #Rust #程序语言
从零开始的Rust生活:02-函数 函数是什么 相信各位学Rust的读者应该多少接触过至少一门程序语言,不过这里我还是会按照我的理解尽可能的去为函数做一个相对更为简单的定义。 对于Rust来说,函数的意义与大多数的程序语言都很相似,我们可以将其视作程序中的一个功能模块。这个功能模块可以对一些我们会反复使用的代码进行封装,从而大幅度简化程序的开发过程。 2020-11-23 #Rust #程序语言
从零开始的Rust生活:01-基本类型与基本运算符 Rust中的基本数据类型 Rust中的基本数据类型和大多数的语言一样,都可以简单的被分为整型、浮点型、布尔型等等,同时Rust还有一些专属于自身的一些很奇妙的类型,包括Option<T>,Box<T>等等。 通常Rust中的类型对应的符号为: 有符号整型:isize,i8,i16,i32,i64,i128 无符号整型:usize,u8,u16,u32,u64,u128 浮 2020-11-21 #Rust #程序语言
从零开始的Rust生活:00-前言 关于我为什么要写这个系列的博客 我只是一位Rust初学者,写这篇博客一方面是为了记录自己Rust的学习历程,另外一方面也希望可以为后来学Rust的人指出一条路,虽然我觉得我还不够格被称为领路人,但是我希望终有一天也可以称为像张汉东这样的大神,能够吃透Rust这门语言,让Rust的编译器成为自己的朋友而并非敌人,虽然在学习的前期她的确像一个敌人那样阻碍着代码的编译(笑)。总之这个系列的博客将会成为我 2020-11-20 #Rust #程序语言
死锁与银行家算法 死锁 死锁作为多进(线)程开发中经常遇到的问题,其通常体现为多个进程和线程同时处于阻塞状态并且在没有任何外力干扰的情况下完全无法解除这种状态的情况。我们可以通过一个著名的场景来具体地理解死锁的概念。 2020-11-19 #操作系统 #多线程