2 Sunlight..

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 17w+

区间dp的总结

1、区间dp含义区间dp 常用dp[i][j] 来表示,含义是在区间[i,j]之间最大的…或是否可以成功。这里提供以下三个题来熟悉区间dp。2、经典区间dp问题,合并果子 现在设有n堆的果子,每堆果子根据果子数量的不同需要耗费不同的体力,现在想把这些果子有次序的合并为一堆,消耗的体力等于两堆果子的重量之和。现在求耗费的最小的体力数多少。比如 5 8 9 35+8=13 消费13体力 13 9 39+3=12 消费12体力 13 1213+12=25 消费25体力总体力消耗为 13

2020-09-01 21:37:06

基于自主web服务器的在线计算和huffman编码解码

1、项目背景 基于http协议的服务已经被广泛应用,做这个项目不仅可以复习所学的网络编程的知识,也可以加深对http协议的理解。2、项目目标 浏览器请求网页时服务器返回自己制作的网页,网页不存在返回404页面。可以实现在线的加减乘除运算和huffman的编码解码。3、项目分析  1、实现最基本的HTTP/1.0版本的web服务器,客户端能够使用GET、POST方法请求资源  2、服务器将客户请求的资源以html页面的形似呈现,并能够进行差错处理(如:客户请求的资源不存在时,服务器能够返回一个40

2020-08-21 12:48:49

windows下的文档搜索工具

1、项目背景 在windows下进行磁盘查找速度过慢(可以为文件建立索引来提高查找效率)。因此参考everything,借助于数据库,设计一个自己的文档搜索工具。2、everything原理 Everything并不扫描整个磁盘,只是读取磁盘上的USN日志,并建立索引,所以速度飞快。但因此缺点也明显: 1、只支持NTFS格式的分区,因为USN日志是NTFS专有的。在FAT、FAT32格式分区上无法使用Everything。 2、只索引文件名称、日期和大小,不索引文件内容和附加属性,而windo

2020-08-10 17:14:14

mysql中MVCC理解

1 事务隔离级别读未提交(脏读,不可重复读,幻读)读已提交(不可重复读,幻读)可重复读(幻读)–>但在mysql5.6版本之后,由于mysql的具有的间隙锁,解决了幻读问题串行化(安全级别高),效率低,涉及加锁解锁操作。所以引入MVCC,不使用锁来实现大并发操作。2 MVCC MVCC即多版本并发控制,基本思想是在读已提交和可重复读这两个隔离级别下,为每次事务生成一个新版本的数据,随后在使用语句读数据时选择不同的版本的数据即可以实现对结果完整性的读取。可以提高并发的读写性能。 read

2020-08-08 16:36:08

多进程、多线程以及如何选择?

关于线程: 首先关于多线程多进程,看一张图: 基本上把线程,进程区别说清楚了提到线程,就不得不提线程同步的问题,我专门归纳了一篇文章: 线程同步常用方...

2020-07-27 21:50:31

Huffman树和Huffman的编码和解码,香农码和费诺码

文章目录1 、原理1.1 霍夫曼编码为什么huffman编码提高了效率?1.1 霍夫曼树2、代码(对26的英文字母编码)3、香农码和费诺码3.1香农码3.1费诺码1 、原理 Huffman编码是一种信源编码,而信源编码的含义是:以提高通信有效性为目的的编码。通常通过压缩信源的冗余度来实现。采用的一般方法是压缩每个信源符号的平均比特数或信源的码率。即同样多的信息用较少的码率传送,使单位时间内传送的平均信息量增加,从而提高通信的有效性。 Huffman编码是要实现前缀编码(任意一个码字都不是其他码字的前缀

2020-07-27 19:31:44

C/C++混合编程,extern“C“

文章目录1、C++使用C函数1、C++使用C函数//t2.h//注意这里不能加#include<stdio.h>,因为extern是C++的关键字#pragma onceextern "C" { int add(int, int); int sub(int, int);}//t3.c #include<stdio.h>int add(int a , int b){ return a + b;}int sub(int a, int b){ retu

2020-07-17 11:17:51

基数排序和希尔排序,堆排

文章目录1、基数排序2、希尔排序1、基数排序 基数排序是一种不进行比较的稳定的排序方法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。void radixsort(vector<int>& v, int n) //基数排序{ //找到最大的数,计算出分配次数 int maxv = *max_element(v.begin(), v.end()); int k = to_string(maxv).size(); //声明tmp数组,用于收集数据 vecto

2020-07-15 10:07:03

设计模式(结构型) -- 适配器模式,代理模式,装饰器模式

 定义:将一个类的接口转换为客户希望的另一个接口,使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。例如,我们使用for_each()来遍历数组class MyPrint {public: void operator()(int v1, int v2){ cout << v1 + v2 << endl; }};int main(){ vector<int> v; for (int i = 0; i < 10; i++) v.pu

2020-07-13 12:04:12

设计模式 简单工厂--工厂--抽象工厂

文章目录1、简单工厂2、工厂3 抽象工厂4 参考1、简单工厂 我们假设使用工厂生产苹果,香蕉,梨子,这里我们将苹果,香蕉,梨子都抽象为水果,然后使用一个静态的工厂函数去生产水果,代码很好理解,但不符合开闭原则。比如,当我们又需要生产西瓜的时候,需要修改工厂的源码,增加对if…else…的判断。#if 1#include<iostream>using namespace std;//简单工厂模式,不符合开闭原则,不算在23种设计模式中//抽象水果class AbstractFru

2020-07-13 10:21:14

设计模式(行为型)命令模式, 观察者模式

文章目录1、定义2、简单实现1、定义 观察者模式主要是是定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。 而我们设计程序有两个基本原则,开闭原则和依赖倒置原则,开闭原则是对源代码地更改时不建议的,而对原始程序进行模块添加是建议的(策略模式)。而依赖倒置原则是要求具体的类要依赖于抽象类,借助于抽象类地接口,实现具体的类或功能。 现在有大量的关于设计模式的书,讲的都挺不错,但基本上都是使用java语言的,是使用c++语言

2020-07-12 22:20:14

leetcode 200. 岛屿数量 dfs,bfs,unique find

文章目录dfsbfsunique find给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。 思路:这个图刚开始给我的感觉是和leetcode 547. 朋友圈的解法是一样的,直接将leetcode 547.的代码复制过来不对,检查原因是leetcode 547.是求图上的连通分量,比如如下数据:[[1,1,1], [1,1,0], [0,0

2020-07-08 15:13:14

leetcode 547. 朋友圈三种解法 dfs,bfs,union find

文章目录dfsbfsunique findunique find朴素写法unique find优化 班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N∗NN * NN∗N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j]=1M[i][j] = 1M[i][j]=1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出

2020-07-08 14:46:57

摩尔投票算法解决leetcode 169, 229

文章目录1、leetcode 1691.1其他方法1.2 摩尔投票2、leetcode 2292.1 其他方法2.2 摩尔投票1、leetcode 169给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1.1其他方法 思路:对于这个题,常见的方法时使用hashmap对数据每个元素进行统计,然后计算除每个元素的个数,最后进行提取就ok,这个方法需要二外的空间。 还有一种方法是直接对其

2020-06-29 17:33:30

在数组中找到重复次数出现最多的数,不使用额外空间

题目:在数组中找到重复次数出现最多的数? 至少两种方法. 其中一种空间复杂度要求O(1)1、第一种方法是使用map来对数组进行出现的元素的次数进行记录。 map<int,int> mp; mp[v[i]]++。要使用额外空间。2、第二种方法 我们考虑先对元素进行排序(使用快排,冒泡…都可以),然后使用count来记录现在的元素和下一个元素个数,在使用一个pair记录当前最大元素的值和个数,进行动态更新,有点像动态规划。pair<int, int> fun1(vector&

2020-06-29 12:42:07

判断二叉树是否对称 递归,非递归(bfs)

文章目录1、递归2、非递归请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。1、递归 我开始想的是产生一个镜像的树,然后递归的判断这两个数是否相等,但是这样很麻烦。题解是我们只需传进去两个一样的树,判断左子树是否等于右子树如果一个二叉树是对称的,则假设有两个这样的树,1树的左节点等于2树的右节点1树的右节点等于2树的左节点*class Solution {public: bool equal(TreeNode*pRoot,Tre

2020-06-16 15:15:28

leetcode 买卖股票的最佳时机3 4

文章目录123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV123. 买卖股票的最佳时机 III给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 思路:第一眼,就是要使用动态规划去做,我们可以设dp1表示第1次买入的最低价格dp1=min(dp1,prices[i])dp1表示第1次买入的最低价格 dp1=min(dp1,

2020-06-16 14:54:18

LaTex符号大全

2020-06-15 16:04:53

Leetcode 115. 不同的子序列

文章目录1.1 思路11.2 状态压缩2.1 思路22.2 状态压缩 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。 思路1:对于这种给定两个字符串的问题,类似于编辑距离和求最大公共子串,都可以采用动态规划。我们都可以设dp[i][j]dp[i][

2020-06-14 22:36:08

不使用“+”,“-”,“×”,“÷”实现四则运算

文章目录1、加法2、减法3、乘法4、除法1、加法思路: & 按位与运算:相同位的两个数字都为1,则为1;若有一个不为1,则为0。两个数相与,并左移一位:相当于求得进位1&1=1 将1左移一位变成了10,相当于拿到了进位。 ^ 按位异或运算:相同位置不同则为1,相同则为0。相当于每一位相加,而不考虑进位。第一步 异或——无进位相加得result1 (a^b)第二步 与运算+左移一位——>求得进位result2 (a&b)<<1第三步 result =

2020-06-13 16:36:00

查看更多

勋章 我的勋章
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。