代码随想录day48

打家劫舍1

class Solution {
public:
    int rob(vector& nums) 
    {
        int n=nums.size();
        if (nums.size() == 0) return 0;
        if (nums.size() == 1) return nums[0];
        
        vectordp(n,0);
        dp[0]=nums[0];
        dp[1]=max(nums[0],nums[1]);
        for(int i=2;i

打家劫舍2

class Solution {
public:
    int rob(vector& nums) 
    {
        int n=nums.size();
        if (nums.size() == 0) return 0;
        if (nums.size() == 1) return nums[0];
        if (nums.size() == 2) return max(nums[0],nums[1]);
        
        vectordp1(n-1,0);
        vectordp2(n-1,0);
        dp1[0]=nums[0];
        dp1[1]=max(nums[0],nums[1]);
        for(int i=2;i

打家劫舍3

class Solution {
public:
    int rob(TreeNode* root) {
        vector result = robtree(root);
        return max(result[0],result[1]);
    }
    vectorrobtree(TreeNode* root)
    {
        if(root==NULL) return {0,0};
        vector left = robtree(root->left);
        vector right = robtree(root->right);
        int v1=root->val+left[0]+right[0];
        int v2=max(left[0],left[1])+max(right[0],right[1]);
        return {v2,v1};
    }
};

打家劫舍4

class Solution {
public:
    int minCapability(vector& nums, int k) 
    {
        //最大最小二分
        vectornums1(nums.begin(),nums.end());
        sort(nums1.begin(),nums1.end());
        int l=nums1[0],r=nums1.back();
        int n=nums.size();
        int dp[n+2];
        while(l=k) 
            { 
                r = m;
            } 
            //要求的最大值 太小 偷的次数需要很小  但是最少为k  所以 要求的最大值 变大一点
            else { 
                l= m + 1;
            }
        }
        return r;
    }
};

你可能感兴趣的:(算法,leetcode,数据结构)