<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[K08e_824的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/K08e_824</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; K08e_824]]></copyright><item><title><![CDATA[统计好三元组LeetCode1534]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/145726661</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/145726661</guid><author>K08e_824</author><pubDate>Wed, 19 Feb 2025 13:09:51 +0800</pubDate><description><![CDATA[总不能再去把j前面的arr遍历一遍吧，这样不又成n^3规模的复杂度了吗，而根据arr[j],arr[k]能得到什么呢，能得到arr[i]的范围，arr[i]的最小值minVal一定是{0, arr[j] - a, arr[k] - c}中最大的，arr[i]的最大值maxVal一定在{1000, arr[j] + a, arr[k] + c}中最小的，因为是取交集，而arr[i]只要在[minVal,maxVal]这个范围内的都可以选入进去。请你统计其中好三元组的数量。满足下列全部条件，则认为它是一个。]]></description><category></category></item><item><title><![CDATA[数组异或操作LeetCode1486]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/145726324</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/145726324</guid><author>K08e_824</author><pubDate>Wed, 19 Feb 2025 12:45:28 +0800</pubDate><description><![CDATA[给你两个整数， 和  。数组  定义为：（下标从 0 开始）且  。请返回  中所有元素按位异或（XOR）后得到的结果。法一：这里可以用一个很简答的循环解决，


法二，用两个异或运算的基本定理1.4i ^ (4i + 1) ^ (4i + 2) ^ (4i +3） = 02.0 ^ n = n;这里给出的start和start + 2 * i显然和1这一条定理很相似，那到底该怎么用呢，第一个是跨度不同：定理中的跨度是1，而题干中的跨度是2；第二个是起点不同：定理中的起点是4的倍数，而题干中的起点是star]]></description><category></category></item><item><title><![CDATA[2025年408数据结构算法题]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/145594973</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/145594973</guid><author>K08e_824</author><pubDate>Wed, 12 Feb 2025 16:44:34 +0800</pubDate><description><![CDATA[这里会发现，只要突然出现一个0，前缀积数组pre之后所有的项都成了0，这不是简单的加一个res = max{nums[i]}就可以解决的，这个判断仅在这个例子中有效，如果是{1,2,3,0,5,6}呢，这个判断就没有用了。在确定可以用暴力的方法之后，我们要知道如何暴力，如果单纯的用一个双层for循环遍历子数组O(N^2)的方法去遍历，那么再加上算积的复杂度O(N)，则变成了O(N^3)级别的，也会TLE。首先，很容易想到暴力遍历的方法，也就是将所有的子数组的乘积全部算出来，取最大的即可。]]></description><category></category></item><item><title><![CDATA[cpp从0到1---类与对象1]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/133960492</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/133960492</guid><author>K08e_824</author><pubDate>Sat, 21 Oct 2023 15:13:09 +0800</pubDate><description><![CDATA[类与对象]]></description><category></category></item><item><title><![CDATA[cpp从0到1----引用&]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/133080942</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/133080942</guid><author>K08e_824</author><pubDate>Wed, 20 Sep 2023 16:28:52 +0800</pubDate><description><![CDATA[对引用类型++，结果是对其引用的变量++，但是对指针++，会在一块连续的内存中向后移动一个空间，或者直接访问未申请的空间runtime error。这样是100%报错的，因为ra是a的别名，可以通过ra来修改a，但是a是一个const类型的变量，是不能修改的，这样无法保证const的常性；引用其实之所以好用，就是它别名的属性，就像上一条里面的swap函数，看似是传值，其实是传地址，传了个别名上去；我们都知道，在定义数组的时候，数组的长度只能用常量来定义，所以给定一个确定的数字是绝对ok的，]]></description><category></category></item><item><title><![CDATA[cpp从0到1----函数]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/132818877</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/132818877</guid><author>K08e_824</author><pubDate>Mon, 11 Sep 2023 23:02:20 +0800</pubDate><description><![CDATA[因为如果放在具体函数的实现中，如果一旦要修改，它的工作量可就视工程的浩大程度而定了.. 其实如果不怕麻烦，放在哪里都可以...毕竟声明和定义都和具体指无关，只需要这个变量而不是这个值。含有缺省参数的函数叫做缺省函数，缺省函数分为全缺省函数和半缺省函数，在半缺省函数中，缺省参数只能从右到左依次排列，不能中间出现不缺省参数，不能间隔出现！在c语言中，是支持没有返回值类型的函数的，因为在c语言中，默认函数返回值是int类型，但是在cpp中，对返回值检测更加严格，是不允许这种情况发生的！]]></description><category></category></item><item><title><![CDATA[cpp从0到1----命名空间]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/132796672</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/132796672</guid><author>K08e_824</author><pubDate>Sun, 10 Sep 2023 22:50:18 +0800</pubDate><description><![CDATA[因为编译器对两个名字相同的命名空间的处理方法是将他们合并成一个，但是有了相同的就等于在一个作用域中重复定义，到底该听谁的呢0.0。但是要注意，这里我们人为定义一个命名空间并且将其全部内容定义为全局的，如果函数命名的很不巧，很容易和头文件里的内容冲突。引入一个命名空间的概念，命名空间可以理解成一个coder自己创建出来的作用域，在这个作用域里面，变量和函数是独立的。现在不仅要用命名空间中的变量名，而且命名空间中的某个变量用的次数很多，又不想每次都命名空间::变量名，那应该怎么办呢。]]></description><category></category></item><item><title><![CDATA[图论----图的存储及其遍历]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/131749265</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/131749265</guid><author>K08e_824</author><pubDate>Sun, 16 Jul 2023 13:38:30 +0800</pubDate><description><![CDATA[那么该如何处理有边权和无边权呢，对于无边权问题，可以将maze全部初始化为0，然后如果从x到y有边，那就将maze[x][y]赋值为1；将输入的起点，作为下标，将输入的终点，连接到下标的链表上，比如图中的1后面跟着的两个节点，就是1为起点可以走到的两个节点，2后面跟着一个节点，就是2为起点可以走到的节点；这里先给出要遍历的head数组下标，然后从head[u]开始，只要没到-1，那就一直i = ne[i]，为了避免重复遍历，所以还需要一个vis数组，打标记，如果为true就直接跳过；]]></description><category></category></item><item><title><![CDATA[《关于dfs》 一]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/130534339</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/130534339</guid><author>K08e_824</author><pubDate>Sat, 06 May 2023 21:15:40 +0800</pubDate><description><![CDATA[这里觉得绕是很正常的，但其实也很好理解，既然每条对角线上的点 x-y都是相同的 而且 独一无二的 那么将这个x-y加上n之后还是相同的而且独一无二的，这些特性都没有改变过，所以这是一个比较巧妙的技巧；我们可以看到对角线上的点 横纵坐标相加最大为 2(n-1),最小为0，而且是在[0,2n-2]这个区间中，每个值都会出现的，所以我们可以将这个点的横纵坐标的和 作为 判断有没有在对角线上出现过的标准。之前是到哪一个点，那么那一个点就打个标记，但是这个涉及到很多点，同一行的，同一列的，同一对角线的...]]></description><category></category></item><item><title><![CDATA[string类的简单模拟实现]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/130241239</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/130241239</guid><author>K08e_824</author><pubDate>Wed, 19 Apr 2023 13:17:50 +0800</pubDate><description><![CDATA[而给出一个string对象的情况下，传引用可以少调用一次拷贝函数，我们可以通过swap函数交换它们指针的方式，先创建一个临时变量tmp然后让tmp中的_str和this->_str交换即可，不可以直接用传进来的引用swap。而对于用常量字符串构造的情况下，需要在初始化列表中给出指针的默认值，在2019以上的vs版本，会给出无初始化的指针为nullptr，而在低版本编译器中，会给出值为随机值，是一个野指针，对其进行操作也是不合法的；其实没什么难点，string内部实现的其实就是一个维护字符类型的顺序表；]]></description><category></category></item><item><title><![CDATA[c/c++的内存管理]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/130161850</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/130161850</guid><author>K08e_824</author><pubDate>Fri, 14 Apr 2023 22:05:29 +0800</pubDate><description><![CDATA[所以会在k个元素的基础上，多开四个字节空间（在最前面），存储数组长度k，这样delete[]才知道对象数组的大小，会调用k次析构函数（自定义类），并且释放 （k个自定义类类型对象大小 + 4）个字节的空间，但是没有调用delete[],而是用delete，被认为是只有一个元素，只调用了一次析构函数而且没有把那四个字节释放掉，所以程序会崩溃；其中就包含了表示堆中空间，谁被申请了，谁没被申请，以及各种维护双向链表的信息，在之后还多开辟了四个字节的空间，防止数组越界；这里首先定义a，然后再b，然后再c；]]></description><category></category></item><item><title><![CDATA[《关于蓝桥杯--字符串简写》]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/130077181</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/130077181</guid><author>K08e_824</author><pubDate>Tue, 11 Apr 2023 10:29:51 +0800</pubDate><description><![CDATA[我们首先设一个for循环对字符串s进行遍历，然后在内部进行前缀和操作（如果下标大于0，就让后一位 += 前一位，这样就可以实现O(1)查找某一位之前的和），并且在遇到c1的时候就prefix[i] ++,如果c2的下标为k，那么在c2左边，最靠近c2的一个c1坐标应该是 i - k + 1，这是最差情况，长度刚好为k，那之前还有若干个c1，所以我们可以在答案中加上prefix[i- k + 1]；前缀和算法，故名思意就是一个统计前面所有的和的算法，它可以实现O（1）查找数组中某一位之前的和；]]></description><category></category></item><item><title><![CDATA[全排列算法（DFS）]]></title><link>https://blog.youkuaiyun.com/K08e_824/article/details/129925448</link><guid>https://blog.youkuaiyun.com/K08e_824/article/details/129925448</guid><author>K08e_824</author><pubDate>Mon, 10 Apr 2023 10:30:00 +0800</pubDate><description><![CDATA[其实，由于递归函数和栈是相似的特性，先进后出，后进先出，最后一个元素被放入ans之后，递归深度 == n，递归调用结束，最后一个被放入的元素，是第一个被置为false的，这样就实现了按照字典序的顺序从小到大依次输出；因为递归函数，每调用一次都会开辟一个新的栈帧，对于之前一次的递归调用选了哪个数字，下一次调用的递归函数栈帧中并没有保存，所以只有我们自己知道，计算机并不知道；，走到了7之后，再回溯到4，4也没有其他子节点，再回溯到2，也没有其他子节点，再回溯到1，之后以相同的方式遍历右子树；]]></description><category></category></item></channel></rss>