- 博客(372)
- 收藏
- 关注
原创 2449. 使数组相似的最少操作次数(困难,周赛)
由于题目保证:一定能变得与tagert相似。因此将题目进行简化成+1 -1的形式,由于两个数组元素和相等,因此最小和最小的匹配,次小的两个匹配…回到原问题,那么+2 -2怎么做呢?+2 -2并不会改变奇偶性,因此最小奇两个匹配,次小奇匹配,偶数同理。由于+2 -2每次变化量为4,因此ans/4为结果。
2022-10-26 17:15:49 351
原创 2448. 使数组相等的最小开销(困难,周赛)
这道题可以转化为:cost[i]是nums[i]出现的次数,然后都转化为中位数。参考题目:leetcode462. 最小操作次数使数组元素相等。为什么目标是中位数呢?根据中位数贪心的思想。
2022-10-26 16:57:21 370
原创 232. 用栈实现队列(简单)
也就是stk2的栈顶,如果stk2为空则把stk1所有的出栈入栈stk2,然后再取队头。如果stk2为空,则把stk1所有的出栈入栈stk2,然后再出队。stk1stk2均为空。
2022-07-21 09:55:02 118
原创 leetcode 225. 用队列实现栈(简单)
x入队q2,将q1中所有元素出队,入队q2,保证了x在栈顶,将q1和q2交换(不是赋值)易错点swap(q1,q2)而不是赋值。将x入队,然后将之前的n的元素依次出队入队。
2022-07-21 09:42:54 140
原创 主进程 主线程和子线程 三者退出的关系
2)main()中,return0或者exit(0)退出主进程后,主函数创建的子线程都会被终止**。在子线程处理函数中returnNULL相当于调用pthread_exit(NULL)。(1)在主线程和子线程中getpid()得到的进程pid是一样的,pthread_self()得到的线程号不一样。,但是在main()后面写printf()并不会被执行到,怎么会被执行到?......
2022-07-15 16:56:37 1623
原创 leetcode6114. 移动片段得到字符串(中等,周赛)
思路:思维需要满足两个条件:1:L和R出现的顺序是一样的2:L:start的下标i >= tagert的下标j R:start的下标i 双指针
2022-07-10 16:03:57 191
原创 leetcode6112.6112. 装满杯子需要的最短总时长(简单,周赛)
思路一:贪心具体思路:尽量让产生0最晚,这样就一直有正整数可以选,因此每次选最大的两个思路二:数学思想思路三:暴力dfs+记忆化
2022-07-10 15:54:05 165
原创 329. 矩阵中的最长递增路径(困难,有向无环图找最长路径长度)
思路一:对每个结点dfs,该结点的最长路径长度=max(能到达的结点的最长路径长度+1),由于存在重复子问题,因此可 加入 记忆化进行优化。思路二:对从出度为0的结点开始进行逆拓扑排序,bfs的层数为最长路径长度。思路一:记忆化dfs具体思路:dp[i][j] = max(dp[m][n] + 1)其中matrix[i][j] < matrix[m][n]边界:matrix[m][n]比周边都大思路二:从出度为0的结点开始进行逆拓扑排序...
2022-07-06 10:14:06 304
原创 leetcode35. 搜索插入位置(简单,找插入位置,不同写法)
二分:库函数跟 leetcode leetcode704. 二分查找(查找某个元素,简单,不同写法)区间不同,这里的[l, r] 是 [0, n] 而不是[0, n - 1]https://blog.csdn.net/zhangjiaji111/article/details/125601772右边界n是越界数组的,因此只能用右闭:左闭右闭 或者 左开右闭1:左开右闭2:左闭右闭注意的地方:......
2022-07-04 19:03:45 117
原创 leetcode704. 二分查找(查找某个元素,简单,不同写法)
要点:始终维护的区间和初始时的位置是一样的即可。1:左开右开2:左闭右闭3:左开右闭4:左闭右开
2022-07-04 17:04:13 142
原创 leetcode6109. 知道秘密的人数(中等,周赛)
思路:dp + 前缀和具体思路:dp[i]表示第i天新增的人数,而不是第i天知道秘密的人数dp[i]表示第i天知道秘密的人数,逻辑有问题,存在重复…状态转移方程:dp[i] = sum(dp[i-forget+1]…dp[i-delay])ans:sum(dp[n-forget+1]…dp[n])代码上的技巧1:i - delay >= 0 ? sum[i - delay] : 0 可以写成:sum[max(i - delay, 0)]技巧2:防止ans:(sum[n] - su
2022-07-03 20:30:27 151
原创 leetcode1020. 飞地的数量(中等)
思路:dfs/bfs模板题跟 leetcode130.被围绕的区域(中等) 类似https://blog.csdn.net/zhangjiaji111/article/details/123668205
2022-07-02 11:38:12 206
原创 leetcode373. 查找和最小的 K 对数字(中等)
同 leetcode378.有序矩阵中第K小的元素(中等) 类似https://blog.csdn.net/zhangjiaji111/article/details/122716718思路:归并排序刚开始错误的思路:先把v1[0]v2[0]放进去,然后获得v1[x] v2[y]如果将 v1[x+1] v2[y]和v1[x] v2[y+1]放入的话会出现重复!正解:先将[0…min(k,n-1)][0]放进去,每次拿到v1[x]v2[y]将v1[x]v2[y+1]放入............
2022-07-01 22:52:53 132
原创 leetcode2305. 公平分发饼干(中等,周赛,状压dp)
思路一:暴力dfs,时间复杂度为O(n^n),时间复杂度有些高。思路二:子集划分+子集个数有限制->状压dp 时间复杂度O(n * 3^n)是固定的状压dp相关知识:具体思路:dp[i][j]表示消耗的集合个数为i,选择的饼干为j所获得饼干最大总数的最小值。i的取值为1->k j的取值为1->(1......
2022-07-01 09:46:39 319
原创 leetcode2312. 卖木头块(困难,周赛)
思路:dp如何想到dp的?垂直/水平切割,得到更小的子问题先垂直再水平和先水平再垂直会得到同样大小的两块木块,因此1:存在重复子问题对于同样高和宽的两个木块所获得的最多钱数和得到这两个木块的过程无关,因此2:无后效性获得两块小木块的最多钱数,就获得了大木块的最多钱数,因此3:最优子结构满足以上三个条件,因此->dp状态转移:p[m][n]表示高m宽n的木块能获得的最大钱数dp[m][n]能直接卖的话获得一个pricedp[m][n]=max(dp[m][j]+dp[m][n-j]),1.
2022-06-30 21:26:24 223
原创 leetcode2311. 小于等于 K 的最长二进制子序列(中等,周赛)
思路:贪心具体细节:想找到小于k的最小子序列,因此思想是在前面补尽量多的0,贪心的思想,假设k有m位,取最后m位/m-1位,再加上前面所有的0,即为ans代码难点:string按照二进制来转int :stoi(s, nullptr, 2)......
2022-06-30 21:23:04 278
原创 leetcode2310. 个位数字为 K 的整数之和(中等,周赛)
方法一:完全背包在包含结尾是k的数组中,每个元素可选多次,和为num的最少个数方法二:考虑个位数->数学问题具体思路:i最少个数为1,最多为num,num只有3000,因此可以试着枚举假设每个元素x= 10m+k即找到最小的i使得num=10m’+ik成立,即:遍历i,使得 (num-i k)%10==0 ,找到即return i......
2022-06-30 21:20:32 196
原创 leetcode2309. 兼具大小写的最好英文字母(简单,周赛)
优化1:遍历的时候,从后往前遍历,遍历到a[]和b[]都为true,则return优化2: 用位运算将空间优化到O(1)具体思路:'A’65->90 97->122 122-65+1=58 需要用8字节也就是long long类型来存状态添加ch:flag |= (ch - ‘A’)判断大小写字母存在:flag =(flag>>(‘a’-‘A’) & flag)为true得到ans:‘A’ + (flag的位数:64 - __builtin_clzll(flag)) - 1易错点:1ll 左移
2022-06-30 21:15:07 138
原创 leetcode797. 所有可能的路径(中等)
思路:无环 -> dfs找路径,直到到达n - 1注意:记忆化dfs(保存某节点到n-1的路径)并不会优化,这是因为构造ans的复杂度和直接dfs的复杂度是一样的,并不会真正优化 ->自己尝试写过代码了, 用了记忆化甚至更慢了。。。...
2022-06-11 20:05:56 187
原创 leetcode417. 太平洋大西洋水流问题(中等)
思路:二维坐标dfs思路细节:如果元素搜索的话,复杂会很高,倒着来思考,即水往高处流。从左边和从上边作为起点搜索,往==或者>的位置搜索,能到达的位置就是能流到太平洋的方格,大西洋同理,都能到达的方格即为ans。易错点:搜索的起始位置,也可能是ans,要在调用dfs之前进行特殊考虑。...
2022-06-11 12:58:43 145
原创 leetcode684. 冗余连接(中等)
思路:并查集当发现连通的时候,即为最后一条边(因为这条边是构成环的最后一条边,所以当发现连通时即为ans)
2022-06-11 12:36:31 101
原创 leetcode785. 判断二分图(中等)
题意转换->将所有节点分成两组,每条边两个结点分别来自两组。思路:dfs染色(两种)。 每条边两个结点染不同的颜色(1 / -1),若两端结点颜色一致 则 return false注意:可能不是连通图->多次dfs......
2022-06-11 11:47:43 87
原创 leetcode463. 岛屿的周长(简单)
法一:遍历每个方格,判断四周的位置,如果是边界外或者是水域则ans++法二优化:由于只有一个岛屿,所以可以优化到只遍历它周围的格子
2022-06-11 11:15:07 108
原创 leetcode547. 省份数量(中等,求连通分量个数)
类似:leetcode200.岛屿数量(中等)思路一:dfs思路二:bfs思路三:并查集最后通过father[i] == i判断连通分量的个数
2022-06-09 20:57:55 112
原创 leetcode2296. 设计一个文本编辑器(周赛,困难,对顶栈)
思路:针对在数组移动+数组中间任意插入->可以用对顶栈(即堆顶相对的两个栈,用string vector模拟stack,就能取当前位置左边或者右边某几个元素了)
2022-06-07 15:28:21 160
原创 leetcode2295. 替换数组中的元素(周赛,中等)
思路:hash难点:初始元素值各不相同->换成一个在nums[i]不相同的值->每轮操作后数组内的元素依旧不相同,因此每轮替换只会替换一个元素。难度升级:如果每轮替换可能会修改多个下标呢?此时就不能这么做了,O(n^2)的复杂度会超时解决方案:倒着访问operations3->6 5->6 6->7 也就是:3 5 6 都修改为7,先把6修改为7,产生映射6->7,修改5时,发现6存在映射,此时修改为7,产生5->hash[6]的映射,修改3时,再产生3->hash[5]的映射。错误思路:并查集
2022-06-07 11:34:37 143
原创 leetcode2294. 划分数组使最大差为 K(周赛,中等)
思路:划分子序列+只考虑每个子序列中的值,不考虑子序列内元素的顺序->跟顺序无关,直接排序->贪心代码优化:不需要定义pre来记录这一轮upper_bound()开始的元素值,因为nums[index]就是pre,因此定义一个变量index就可以。......
2022-06-07 11:12:45 222
原创 leetcode220. 存在重复元素 III(中等,难题)
思路:滑窗 +有序集合具体思路:维护一个长度为k+1,abs(nums[i] - nums[j])
2022-06-07 10:02:54 178
原创 leetcode395. 至少有 K 个重复字符的最长子串(中等,难题)
思路:滑窗 O(26*n)窗口维护:字符个数可以,乘积 || 和可以,字符个数超过m可以;想法一:但是这道题想维护每个字符都超过m?不行,这样的话右边界不断右移,希望获得更长(为了满足所有的字符),因此slide windows失效(发现r增加时,l不一定增加,因此滑窗不可做)想法二:看到最长子串,二分?长度为m的满足长度为m-1的不一定满足,因此也不具备二分的特点想法三:如何按照想法一固定滑窗?解决办法:窗口内只包括m个字符来固定窗口边界+个数大于等于k的字符==m->满足题意。具体思路:这道题
2022-06-06 20:27:57 123
原创 leetcode1438. 绝对差不超过限制的最长连续子数组(中等,难题)
思路一:滑动窗口+有序集合 O(nlogn)具体思路:multiset维护滑动窗口内的值。思路二优化:滑动窗口+单调队列 O(n)维护两个单调队列:单调递增+单调递减,将查找的复杂度降到O(1),但是代码不太好写。......
2022-06-04 17:54:05 132
原创 leetcode1248. 统计「优美子数组」(中等)
思路一:滑动窗口窗口内始终维护k个奇数。易错点:以nums[r]结尾的子数组个数为nums[l]到下一个奇数l2之间的个数:l2 - l + 1,因此post数组要记录nums[i]下一个奇数出现的位置,当该位置是奇数时,post[i] = i,是偶数时为后面奇数的下标index。代码:index初值是什么不重要,因为访问到的post[l]一定不会取到这个值思路二:hash具体思路:用cnt[i]表示nums[i]前面有多少个奇数对于nums[i],在前面找下标j,cnt[i] - cnt[j -
2022-06-04 17:30:24 186
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人