• leetcode动态规划


    https://zhuanlan.zhihu.com/p/150516970

    https://zhuanlan.zhihu.com/p/265891102


    https://leetcode-cn.com/problems/maximum-product-subarray/submissions/

    /*
    152. 乘积最大子数组
    给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。


    示例 1:

    输入: [2,3,-2,4]
    输出: 6
    解释: 子数组 [2,3] 有最大乘积 6。
    示例 2:

    输入: [-2,0,-1]
    输出: 0
    解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
    */

    #include <bits/stdc++.h>
    using namespace std;

    class Solution {
    public:
         vector<int> maxn, minn;
         int maxProduct(vector<int>& nums) {
             int n = nums.size(), ans = nums[0];
             maxn.resize(n);
             minn.resize(n);
             maxn[0] = minn[0] = nums[0];
             for(int i=1;i<n;i++)
             {
                 if(nums[i]>0)
                 {
                     maxn[i]=max(nums[i], maxn[i-1]*nums[i]);
                     minn[i]=min(nums[i], minn[i-1]*nums[i]);
                 }
                 else
                 {
                     maxn[i]=max(nums[i], minn[i-1]*nums[i]);
                     minn[i]=min(nums[i], maxn[i-1]*nums[i]);   
                 }
                 ans=max(ans, maxn[i]);
             }
             return ans;
         }
    };

    int main()
    {
         vector<int> v{2,3,-2,4,-2,0,-1};
    //    maxn 2 6  -2   4  96  0  0
    //    minn 2 3  -12 -48 -8  0 -1
         Solution s;
         cout<<s.maxProduct(v);
         return 0;
    }



    198. 打家劫舍


    #include <bits/stdc++.h>
    using namespace std;

    class Solution {
    public:
         vector<int> maxn;
         vector<int> nums;
         int rob(vector<int>& nums) {
             this->nums =nums;   
             int n = nums.size();
             maxn.resize(n);
             maxn[0]=nums[0];
             //只有一项的特殊情况
             if(n==1)
                 return maxn[0];
             if(nums[1]>nums[0])
                 maxn[1]=nums[1];
             else
                 maxn[1]=nums[0];
             for(int i=2;i<n;i++)
             {
                 maxn[i]=max(maxn[i-2]+nums[i], maxn[i-1]);
             }
             return maxn[n-1];
         }
         void print(int i) {
             if(i==0)
             {
                 printf("%d ", nums[i]);
                 return;
             }
             else if(i==1)
             {
                 printf("%d ", nums[i]);
                 return;   
             }
            
             if(maxn[i]==maxn[i-1])
                 print(i-1);
             else
             {
                 print(i-2);
                 printf("%d ", nums[i]);
             }
            
         }
    };

    int main()
    {
         vector<int> v{2,7,9,3,1};


         Solution s;
         cout<<s.rob(v)<<endl;
         s.print(v.size()-1);
         return 0;
    }

  • 相关阅读:
    ZeroMQ
    ps-lite源码解析
    RDMA
    MapReduce
    parameter server
    BytePS
    ELF程序头部及程序加载
    网络序与主机序
    CPU、CPU核与线程的关系
    chroot
  • 原文地址:https://www.cnblogs.com/cute/p/15325093.html
Copyright © 2020-2023  润新知