首页 > 学院 > 开发设计 > 正文

算法设计与应用基础作业第二周

2019-11-06 07:05:04
字体:
来源:转载
供稿:网友

53. Maximum Subarray          

Descripyion:

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.

分析:这道题用分置的思想来做:           和最大的子数组只能出现在三个位置:(从中间分开)左边、中间、(从中间分开)右边。           所以分别求出(从中间分开)左边和最大的子数组、中间和最大的子数组、(从中间分开)右边和最大的子数组。           然后比较三者中最大的子数组就是所求的子数组。My C ++ code:
class Solution {public:    static int MaxSubSequence(vector <int>& A ,int N)    {    	return MaxSubSum(A,0,N-1);    }    static int Max(int a, int b, int c)    {    	return max(a, max(b,c));    }    static int MaxSubSum(vector <int>& A , int Left, int Right)    {    	int MaxLeftSum,MaxRightSum;    	int MaxLeftBorderSum,MaxRightBorderSum;    	int LeftBorderSum,RightBorderSum;    	int Center,i;	    	if(Left == Right)    	{	    	return A[Left];    	}	    	Center = (Left + Right)/2;    	MaxLeftSum = MaxSubSum(A,Left,Center);    	MaxRightSum = MaxSubSum(A,Center+1,Right);	    	MaxLeftBorderSum = A[Center];    	LeftBorderSum = 0 ;    	for(i = Center ;i >= Left;i--)    	{	    	LeftBorderSum += A[i];    		if(LeftBorderSum > MaxLeftBorderSum)    			MaxLeftBorderSum = LeftBorderSum;    	}	    	MaxRightBorderSum = A[Center + 1];    	RightBorderSum = 0 ;    	for(i = Center+1;i <= Right;i++)    	{	    	RightBorderSum += A[i];	    	if(RightBorderSum > MaxRightBorderSum)	    		MaxRightBorderSum = RightBorderSum;    	}		    	    return Max(MaxLeftSum,MaxRightSum,MaxLeftBorderSum + MaxRightBorderSum);	         }         int maxSubArray(vector<int>& nums) {        int n = nums.size() ;        return MaxSubSequence(nums , n) ;    }};

171. Excel Sheet Column Number          

Description:

Related to question Excel Sheet Column Title

Given a column title as appear in an Excel sheet, return its corresponding column number.

For example:

    A -> 1    B -> 2    C -> 3    ...    Z -> 26    AA -> 27    AB -> 28 
分析:这道题可以类比十进制数字的表示来做,例如:
     121 = 1*10^2+2*10^1+1*10^0 
     因此,就可以轻易地写出如下代码:
My C++ code:
class Solution {public:    int titleToNumber(string s) {        int total = 0 ;        int i = s.length() ;        for ( ; i > 0 ; i --)        {            total += (s[ i - 1 ] - 'A' + 1) * pow(26 , s.length() - i) ;        }        return total ;    }};


上一篇:input type

下一篇:Groovy 正则表达式

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表