力扣53,最大子阵列和
1.双循环(超时)
时间复杂度:o (n 2): n是数组元素的个数。
空间的复杂性:O(1)
1 int maxSubArray(矢量nums){ 0
2 int max num=nums[0];
3 int sum=0;
4表示(int I=0;inums . size();I){ 0
5总和=0;
6表示(int j=I;jnums . size();j ){
7 sum=nums[j];
8 if(maxnumsum)
9 maxnum=sum
10 }
11 }
12返回maxnum
13 }
2.动态规划(84ms,70;66.2兆字节,38%)
复杂度:o (n): n是数组元素的个数。
空间的复杂性:O(1)
1 int maxSubArray(矢量nums){ 0
2 int max num=nums[0];
3 int sum=0;
4 //注意这个问题只是为了得到最大和。
5适用于(auto x : nums){ 0
6 //如果当前值的总和小于最新的X,则将总和更新为最新的X
7 sum=sum xx sum x:x
8 maxnum=maxnumsum maxnum 3360 sum;
9 }
10返回maxnum
11 }
3.贪婪(92ms,49%;66.2兆字节,25%)
复杂度:o (n): n是数组元素的个数。
空间的复杂性:O(1)
1 int maxSubArray(矢量nums){ 0
2 int max num=nums[0];
3 int sum=0;
4 //即使数组都是负的,在sum返回0之前,它将获得maxnum的最大赋值。
5适用于(auto x : nums){ 0
6 sum=x;
7 maxnum=maxnumsum maxnum 3360 sum;
8 if(sum0)
9 sum=0;
10 }
11返回maxnum
12 }
4.分治法(懂,不会写)
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147920.html