<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[diwanglin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/diwanglin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; diwanglin]]></copyright><item><title><![CDATA[【数的范围（二分）】]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/123960277</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/123960277</guid><author>diwanglin</author><pubDate>Mon, 04 Apr 2022 21:06:31 +0800</pubDate><description><![CDATA[二分
二分总共分为两大块，分为实数二分和整数二分，对于整数二分会出现很多边界问题，故难度更大。
整数二分有两种情况，对应两个不同的模板，如下
算法思路：假设目标值在闭区间[l, r]中， 每次将区间长度缩小一半，当l = r时，我们就找到了目标值。
版本1
当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时，其更新操作是r = mid或者l = mid + 1;，计算mid时不需要加1。
int bsearch_1(int l, int r)
{
    while (l &lt; ]]></description><category></category></item><item><title><![CDATA[【逆序对的数量】]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/123856246</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/123856246</guid><author>diwanglin</author><pubDate>Wed, 30 Mar 2022 20:48:07 +0800</pubDate><description><![CDATA[逆序对的数量
如样例2 3 4 5 6 1，其中2和1，3和1，4和1等等均为逆序对，共有五个，答案输出5即可。
思路
依然使用分治的思想，利用上一篇归并排序的思路即可完成。
先将中点左右两边分别递归排序，之后进行归并，与之前不同的是，我们本次将排序函数进行改变，使其能够同时输出所排序区间中逆序对的数量。
其中一个关键的思路在于，当一个左半边区间的数i是大于右边的数j时，则i之后的每一个数都是大于j的，由此我们可以很方便的统计出逆序对的数量。
题目
给定一个长度为 n 的整数数列，请你计算数列中的逆序对的数]]></description><category></category></item><item><title><![CDATA[【归并排序】]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/123832922</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/123832922</guid><author>diwanglin</author><pubDate>Tue, 29 Mar 2022 21:42:30 +0800</pubDate><description><![CDATA[归并排序
思路
归并排序的主要思路是将数组a分为左右两边，分别进行递归排序，后将两个排好序的子数组a1,a2一一对比，从中选出较小的数排列在另一个数组b中，如此循环往复，直至某一个子数组排空后，将另一个子数组直接加入数组b中，完成排序。
时间复杂度
O(nlogn)
注
归并排序是稳定的
例题
给定你一个长度为 n 的整数数列。
请你使用归并排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式
输入共两行，第一行包含整数 n。
第二行包含 n 个整数（所有整数均在 1∼109 范围内]]></description><category></category></item><item><title><![CDATA[第k个数（快速选择算法）]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/123780827</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/123780827</guid><author>diwanglin</author><pubDate>Sun, 27 Mar 2022 20:51:26 +0800</pubDate><description><![CDATA[第k个数（快速选择算法）
在快速排序的基础上增加了输出第k个数的要求，显然易知可以通过快排后直接输出数组下标来实现，但快速排序算法的时间复杂度为O（nlogn），而快速选择算法的时间复杂度是O(n)，大家可以根据数据范围的不同选择不同的方法。
快速选择算法
与快速排序相同的是，仍然先找到整个数组的一个分界点x，可以是左边，右边，中间等，使x左边的数都小于等于x，右边的数都大于等于x，进而再递归排序左右两边，之后设x左边的数的个数为Sl，右边为Sr。
由于我们要求第k个数，如果k是小于等于Sl的话，证明k是在]]></description><category></category></item><item><title><![CDATA[【快速排序】]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/123671521</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/123671521</guid><author>diwanglin</author><pubDate>Tue, 22 Mar 2022 21:14:49 +0800</pubDate><description><![CDATA[快速排序
时间复杂度O（nlogn）
对比sort函数O（nlog2n）
主要用来解决小于十的六次方的数据范围的排序
主要思路
在一个无序的数组中选定一个数x，位置随意，可以选择左边界，右边界，中间或是随机一个数，进而定义i,j分别作为左右边界指针向中间遍历，定义左边均为小于x的数，右边均为大于x的数。
故想要满足此条件，需要当i找到一个大于x的数时停止遍历，等待j找到一个小于x的数后，将二者交换位置，之后再对左右半边分别继续进行如上排序。
例题
给定你一个长度为 n 的整数数列。
请你使用快速排序对这个数]]></description><category></category></item><item><title><![CDATA[多重背包Ⅲ 单调队列优化]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/121062862</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/121062862</guid><author>diwanglin</author><pubDate>Sun, 31 Oct 2021 14:17:30 +0800</pubDate><description><![CDATA[多重背包Ⅲ 单调队列的优化
写在前面
最近又跑去看了背包九讲 然后前面都很顺利 直到多重背包Ⅲ 也就是两万的数据范围后 开始不断tle 心想着我原来能过的呀 二进制优化不就好了吗 看了评论发现是加强了数据 二进制优化是NVlog(S)的时间复杂度 算了算确实是超时的 那没办法 算法这东西 讲的不就是一个优化嘛。
看看题
有 N 种物品和一个容量是 V 的背包。
第 i 种物品最多有 si 件，每件体积是 vi，价值是 wi。
求解将哪些物品装入背包，可使物品体积总和不超过背包容量，且价值总和最大。
输出最大]]></description><category></category></item><item><title><![CDATA[关于dp动态规划]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/110850206</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/110850206</guid><author>diwanglin</author><pubDate>Tue, 08 Dec 2020 23:01:04 +0800</pubDate><description><![CDATA[关于dp动态规划
众所周知动态规划是一个很大的分类，所能使用的范围也非常的广，所以在这里我就简单帮助大家入门一下。
首先什么是动态规划：
我所理解的动态规划就是把一个问题划分成相对简单的子问题去求解，所以它常常被用来解决重叠子问题和最优子结构性质的问题。
同样，因为对于相似的子问题我只需要解决一次，并记忆下来，就可以对其他类似的问题直接求解，所以时间复杂度也很低。
关于最优子结构：就是所求问题的最优解就是子问题的最优解。
下面借鉴一下其他优秀的博客对dp算法的理解：
DP在算法上的形式是什么？
有两种，一种]]></description><category></category></item><item><title><![CDATA[关于字符串（压缩与解压）]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/110353038</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/110353038</guid><author>diwanglin</author><pubDate>Sun, 29 Nov 2020 21:37:50 +0800</pubDate><description><![CDATA[这次是第二篇了
最近发现自己字符串学的好差
然后写到了两道好玩的题
关于字符串的
下面先挂第一道简单的
题目
如果字符串中出现了连续的 N(N &gt; 1) 个相同字符串 S，那么它们将会被压缩为 [N|S]（输入保证 N 不会被压缩），例如字符串 ABCABC 将会被压缩为 [2|ABC] 。
（本题为简单难度，字符串只需解压一次，解压次数可能为一位数或两位数。）
输入
第一行给出字符串的长度 n。
第二行给出一个由“大写字母”，“[”，“|”，“] ”组成的字符串 s。
输入数据保证字符串解压前后长度]]></description><category></category></item><item><title><![CDATA[关于DFS(深度优先搜索）]]></title><link>https://blog.youkuaiyun.com/diwanglin/article/details/109966841</link><guid>https://blog.youkuaiyun.com/diwanglin/article/details/109966841</guid><author>diwanglin</author><pubDate>Sun, 22 Nov 2020 22:50:46 +0800</pubDate><description><![CDATA[关于DFS（深度优先搜索）
一年前开始接触c语言 后来学了算法 因为没坚持下来就放弃了一段时间，现在想重新捡起来，就算不为了拿下什么奖，也为了自己以后能说起来我也坚持过学一些东西。
因为本来就是个小白，而且csdn上关于dfs的讲解也有很多，所以接下来的理解仅供记录自己学习，如有错误欢迎指正。
先说说为什么写dfs吧，最近打了场比赛，dfs题很多，突然就想到搜索算法在比赛中很常用，学会用的话很多题都很好写，所以今天又去学了一下。
下面先把题挂一下：
这是一道简单的：

其实就是一个简单的迷宫，入口是S,出口]]></description><category></category></item></channel></rss>