LEETCODE
we have a whole life
这个作者很懒,什么都没留下…
展开
-
Leetcode-198. 打家劫舍
自己一定要相信自己 分析: 假设只有一家可以打劫,那就偷窃这一家即可。 假设有两家可以偷窃,那就偷窃两者中金额最大的那一家。 假设有三家,那就比较偷窃第一家+第三家的金额之和和第二家的金额做比较,选最大的那个。 设dp[i]是偷窃到当前人家的最大金额数。当前这家有两种选择: 偷 如果偷,那么前一家就不能偷,也就是dp[i-1]不能偷,得到的金额就是dp[i-1]+nums[i]。 不偷 如果不偷,那么前一家就可以偷,得到的金额就是dp[i-1]. 由此得到状态转移方程: dp[i]=原创 2022-02-07 12:01:21 · 204 阅读 · 0 评论 -
Leetcode-746. 使用最小花费爬楼梯
已经麻了,熟了,就巧了。 边界问题研究,或者说,问题分析。 有n层楼梯,从第一层或者第二层开始走,一次走一步或者两步,直到楼梯顶部,也就是第n+1层。 那么对应下标是从0或1开始到n。 对于这个记录数组来说 基础值:dp[0]=dp[1]=0 公式:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]) 式子什么意思? 到达第i层,有两种可能, 从第i-1层走一步,花费为dp[i-1]+cost[i-1] 从第i-2层走两步,花费为dp[i-2]+cost[i-2]原创 2022-02-06 18:25:21 · 173 阅读 · 0 评论 -
Leetcode-70. 爬楼梯
这题秒杀,典型的动态规划。 参考链接: Leetcode-1137.第 N 个泰波那契数 就是一点,就是关于下标与顺序。 class Solution { public: int climbStairs(int n) { //记录数组 vector<int> v; //基础值 v.push_back(1); v.push_back(2); //公式 //v[i]=v[i-1]+原创 2022-02-06 17:58:53 · 5759 阅读 · 0 评论 -
Leetcode-1137.第 N 个泰波那契数
跟斐波那契数列基本一样。 参考文章:斐波那契数列 想都不想,直接秒杀: class Solution { public: int tribonacci(int n) { //记录的数组 vector<int> v; //基准值 v.push_back(0); v.push_back(1); v.push_back(1); //公式 //v[i]=v[i-1]+原创 2022-02-05 19:17:26 · 375 阅读 · 0 评论 -
Leetcode-509斐波那契数
斐波那契额数列。 算是最简单的了。 第一种: 递归 class Solution { public: int fib(int n) { if(n<2){ //这一步真是巧妙,我还一直担心,觉得n==0和n==1还要分开讨论, //结果,直接return n;什么心也不用操。 return n; }else{ return fib(n-1)+fib(n-2); }原创 2022-01-30 19:58:19 · 564 阅读 · 0 评论 -
Leetcode-121
动态规划,不会。 硬着头皮上。 官方的答案确实很厉害; 找历史最低点(),然后计算今天卖得到的收益是多少。 首先是找一个很大的值,假设第一天之前的历史最低点(注意不包括今天)为一个很大的值,这样对第一天而言,它的历史最低点是那个很大的值。 然后从第一天开始遍历,此时我们已经知道了这一天的历史最低价格,就可以计算倘若今天卖出的收益是多少。 计算后,结果肯定是个负值,和我们的初始设置的最大收益0比较,显然是小的,所以我们选择第一天不卖出。 接着,我们算算下一天的历史最低价格。 然后遍历完就可以了。 class原创 2022-01-29 21:54:29 · 224 阅读 · 0 评论 -
Leetcode-217
第一种方法: 先试用C++内置算法sort来对数组进行排序,然后,从第一个元素开始两两比较,一旦出现相同的就返回true。 class Solution { public: bool containsDuplicate(vector<int>& nums) { sort(nums.begin(),nums.end()); int size=nums.size(); for(int i=0;i<size-1;i++){原创 2022-01-27 18:32:14 · 107 阅读 · 0 评论