![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法
文章平均质量分 73
Lzed
我好菜啊
展开
-
快速幂取模运算
caesiumlz96@gmail.com 2017/1/13假设我们要计算xa%px^a \% p,首先,不管是如下的哪一个算法,都基于如下事实:(x∗y)%p=(x%p)⋅(y%p)%p(x * y) \% p = (x \%p) \cdot (y \% p) \% p普通幂运算令pow(x, a)为x的a次方取模,在普通指数运算中,我们利用n次循环来计算该值。时间复杂度为O(n)O(n)原创 2017-01-13 14:34:48 · 413 阅读 · 0 评论 -
Leetcode 169 - Majority Element(Moore投票算法)
题意给一个数组,求它的majority,对majority的定义为:出现次数超过⌊n2⌋\lfloor \frac{n}{2} \rfloor的元素。思路算法1O(nlogn)O(nlogn)时间。排序,然后返回中间的那个元素即可。算法2O(n)O(n)时间和O(n)O(n)空间。我们用unordered_map来存储每个元素出现的次数,最后返回出现次数超过⌊n2⌋\lfloor \frac{n}{原创 2017-02-15 22:03:10 · 216 阅读 · 0 评论 -
Leetcode 224 - Basic Calculator(表达式求值1)
题意表达式求值,只含有+, -, (, )。思路转逆波兰表示后求值。转逆波兰的过程:扫描字符串,如果是数字直接输出如果是),那么一直出栈到遇到(。 如果是运算符,比较当前运算符op和栈顶运算符top的优先级,如果top≥optop \geq op,那么出栈直到上述条件不满足。将op放到栈里面。在处理数字的过程中,注意空格的处理。代码class Solution {public: i原创 2017-03-05 20:07:57 · 273 阅读 · 0 评论 -
Leetcode 51 - N-Queens(八皇后问题)
题意求N皇后问题的解思路回溯法,最后递归返回时还原路径即可。代码class Solution {private: int a[100]; int n; vector<vector<string>> ans;public: void dfs(int step) { if (step >= n) { vector<string>原创 2017-03-22 15:00:52 · 430 阅读 · 1 评论 -
Leetcode 43 - Multiply Strings(高精度乘)
题意实现高精度乘法。思路模拟即可,但是模拟也是有方法的。算法1直接像我们手算乘法一样模拟,每次计算出来的一位都要保证小于10并且记录进位。过程如下:算法2比算法1简单很多。还是像手算乘法一样,但是比如我们算出来某一位相乘大于等于10后,我们不进位,直接保留结果,在最后的时候再统一进位。还是上面那个例子:时间复杂度:O(mn)O(mn)(其中m和n分别是两个字符串的长度)代码algorithm 1cl原创 2017-03-16 08:02:52 · 333 阅读 · 0 评论 -
排列组合问题及其实现
Permutation不含重复元素问题描述给一个大小为n为数组a,a内的元素互不相同,要求求出A(n,k)A(n, k)。思路直接dfs即可。枚举当前位需要放的数字,然后看前面是否出现。代码// a is original arrayvoid dfs(vector<int> t, int step) { if (step == k) { ans.push_back(t)原创 2017-04-03 13:52:35 · 318 阅读 · 0 评论