码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode的medium题集合(C++实现)八

时间:2015-05-19 13:12:26      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:c++   leetcode   动态规划   二分法   

1 Pow(x, n)
该题采用二分法进行递归

double myPow(double x, int n) {
        if(n==0) return 1;
        if(n<0)
        {
            n=(-n);
            x=1/x;
        }
        double res=myPow(x,n/2);
        if(n%2==0)
        {
            return res*res;
        }
        else
        {
            return res*res*x;
        }

    }

2 Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [?2,1,?3,4,?1,2,1,?5,4], the contiguous subarray [4,?1,2,1] has the largest sum = 6.
该题可以采用动态规划解决,dp[i]=dp[i?1]>0?dp[i?1]+nums[i]:nums[i]. 很显然,当当前的最大值小于0时,计算下一个值时将小于0的数丢弃。

int maxSubArray(vector<int>& nums) {
        int max=INT_MIN;
        int n=nums.size();
        int mid=0;
        for(int i=0;i<n;i++)
        {
        //这里用mid,max替代dp数组以节省空间
            mid=mid+nums[i];
            mid=(nums[i]>=mid?nums[i]:mid);
            if(mid>max)
            {
                max=mid;
            }
        }
        return max;
    }

LeetCode的medium题集合(C++实现)八

标签:c++   leetcode   动态规划   二分法   

原文地址:http://blog.csdn.net/zhulong890816/article/details/45841901

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!