算法
文章平均质量分 52
兰德朔
这个作者很懒,什么都没留下…
展开
-
leetcode 11-20
leetcode 11-2011.盛最多水的容器解题思路单调栈+二分首先可以想到一个贪心的思路:对于每个候选的右边界j,它应该匹配的左边界i是最靠左的且满足h[i]>=h[j]的那个位置(当然还有另外一种情况,左侧边界i充当最小值,这个只要把数组反一下再做一次上面的算法,更新答案就好了。)。两种情况:固定左端点,找右端点的最大值;固定右端点,找左端点的最大值,最后取max代码const int N = 3e4 + 10;class Solution {public: int原创 2021-08-08 22:34:11 · 119 阅读 · 0 评论 -
leetcode 1-10
leetcode 1-101. 两数之和解题思路从左往右依次遍历一遍,若target-nums[i]能在hash表中找到,就返回下标;若没找到,就将当前下标加入到hash表中代码class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> umap; for(int i = 0原创 2021-08-06 22:04:31 · 104 阅读 · 0 评论 -
用栈求表达式值
用栈求表达式值中缀表达式求值原题链接规则:(1)遇到数字,则用第二个指针将该数字读取出来,然后push到nums中(2)遇到(,直接push到ops中(3)遇到),则从ops中逐一弹出操作符直到遇到(,每弹出一个操作符,就通过count函数计算一遍该操作符计算出的值,再将该值压入栈(4)遇到+、-、*、/,那么就通过while循环检查是否ops栈顶优先级大于等于当前操作符,若满足,则弹出栈顶操作符,计算值;最后将当前操作符压入ops#include <bits/stdc++.h>原创 2021-08-02 21:09:35 · 401 阅读 · 0 评论 -
状态压缩DP
状态压缩DP蒙特里安的梦想放弃,参考大佬博客吧,#include<bits/stdc++.h>using namespace std;const int N = 12, M = 1 << N;long long f[N][M]; // 第一维表示列, 第二维表示所有可能的状态/*f[i][j]:表示第i列中,横着摆放占据的位置状态为j的摆放总数*/bool st[M]; // st[i] == true:表示状态i是合法的状态, 存储每种状态是否有奇数个连续的原创 2021-08-02 12:44:38 · 97 阅读 · 0 评论 -
2021-08-02
数位统计DP参照大佬的博客.,自己写出的代码(比较复杂, 大佬的博客非常简洁)核心思想:可以不用vector存每一位,直接计算某位的左边和右边的整数是多少。可以不用讨论那么多细枝末节,只需要知道,当i为0时其左边整数不能为0,就够了。思路:求一个数字第i位上x出现的次数, 遍历所有位, 就可以计算出整个数num上, x出现的总次数考虑情况: abc x def (其中abc泛指 x 的左边的高位数字, def 泛指 x 的右边的低位数字)那么, p 代表 pow(10, i), 即x所在位原创 2021-08-02 10:59:58 · 77 阅读 · 0 评论 -
石子的合并
区间DP石子的合并思路:核心:最后一次合并一定是左边连续的一部分和右边连续的一部分进行合并状态表示:f[i][j]表示将i到j合并成一堆的方案的集合,属性为Min状态计算:(1)i<j时,f[i][j]=mini≤k<j(f[i][j],f[i][k]+f[k+1][j])+s[j]−s[i−1]f[i][j] = \underset {i\leq k < j}{min}(f[i][j], f[i][k] + f[k + 1][j]) + s[j] - s[i - 1]f[i]原创 2021-08-01 20:26:41 · 88 阅读 · 0 评论 -
鸡蛋的硬度
鸡蛋的硬度先想一个简单问题:只有两个鸡蛋的问题两个软硬一样但未知的鸡蛋。有座100层的建筑,要你⽤用这两个鸡蛋确定 哪一层是鸡蛋可以安全落下的最⾼高位置。可以摔碎两个鸡蛋。这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第⼀个鸡蛋第一次从第i层扔下,如果碎了了,就剩⼀个鸡蛋,为确定下⾯面楼层中的安全位置,必须从第⼀层挨着试,还需 要i−1次;如果不碎的话,上面还有n−i层,剩下两个鸡蛋,还需要f[n−i]次 (子问题,n层楼的上n-i层需要的最少判断次原创 2021-07-31 16:54:14 · 166 阅读 · 0 评论 -
数值的整数次方
剑指 Offer 16. 数值的整数次方思路:快速幂当n小于0的时候,将x取倒数,n取反,这里注意要将n设置为long longclass Solution {public: double myPow(double x, int n) { long long k = n; if(n == 0) return 1.0; else if(k < 0){ x = 1 / x; k = -k;原创 2021-07-31 10:42:36 · 62 阅读 · 0 评论 -
2021-07-31
快速幂核心思路:反复平方法要求akmodma^k\quad mod \quad makmodm的结果,我们要先预计算出:a20modma21modma23modm...a2log2kmodma^{2^0}\quad mod \quad m\\a^{2^1}\quad mod \quad m\\a^{2^3}\quad mod \quad m\\...\\a^{2^{log_2k}}\quad mod \quad ma20modma21modma23modm...a2log2kmo原创 2021-07-31 10:16:13 · 74 阅读 · 0 评论