首页 > 编程语言 > 详细

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

时间:2015-05-19 13:11:03      阅读:300      评论:0      收藏:0      [点我收藏+]

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++实现)八

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!