LeetCode
SmileTAT
这个作者很懒,什么都没留下…
展开
-
快速幂原理及伪代码
应用场景是求解形式的连续幂次元算,可以是数值或矩阵形式。经典算法题为斐波那契数列问题。快速幂的核心思想是将以二进制方式表示成,则所要求解的原式可以表示为,取值为0或1取决于二进制表示的n在位的值,。。可以看到随着增加1则为上一个的平方。亦可从公式推导。按上述原理可写成如下的代码,其中multiply是所有可乘的方法的抽象表示,例如数值乘,矩阵乘。时间复杂度:空间复杂度:result = 1; // 或I单位矩阵base = M;while (n > 0) { if (n原创 2021-07-03 09:26:59 · 671 阅读 · 0 评论 -
深入浅出动态规划--基本动态规划
一维动态规划LeetCode 70 爬楼梯题目描述:给定n阶台阶,每次可以走一步或者两步,求共有多少种方法走完n阶楼梯。解析:考虑到到第阶楼梯的方式有两种,从第阶走一步到达或者从第阶走两步到达,即可推得到到达第阶方法数,即常见的斐波那契数列。解法一:动态规划时间复杂度空间复杂度class Solution {public: int climbStairs(int n) { if (n <= 2) return n; int pre原创 2021-07-01 09:24:57 · 112 阅读 · 0 评论 -
算法杂记 001 约瑟夫环
问题描述:1)n个人,编号为0~n-1;2)从0开始报数,报至m-1的退出;3)剩下的人继续从0开始报数;4)求最后的胜利者。解法:第一次报数:退出者编号为(m-1)%n记k=m%n,通过对剩下的人重新编码转换为原先相同的子问题。若已知子问题的解为x则原问题的解为(x+m)%n,映射推导x ->(x+k)%n <=> (x+m%n)%n <=> (x+...原创 2019-10-13 20:50:05 · 121 阅读 · 0 评论 -
第一章 数组 002 盛水最多的容器
解法:双指针。假设当前所选的两块板的索引为left和right,当前area为min(height[left], height[right]) * (right - left)。height[left], height[right]中较小的那块板与(left, right)区间内的板构成的area都将小于当前area。因为[left不变和right减小] -> [right-left减...原创 2019-10-12 14:51:27 · 141 阅读 · 0 评论 -
第一章 数组 001 两数之和
解法:hashmap记录{key: num, value: index},查找key: target-num。利用hashmap查找O(1)的时间复杂度。复杂度:时间O(n),空间O(n)。代码:class Solution {public: vector<int> twoSum(vector<int>& nums, int tar...原创 2019-10-12 14:25:41 · 89 阅读 · 0 评论