1. 程式人生 > 其它 >力扣53、最大子陣列和

力扣53、最大子陣列和

1、雙迴圈(超時)

時間複雜度:O(n^2):n為陣列元素個數

空間複雜度:O(1)

 1 int maxSubArray(vector<int>& nums) {
 2        int maxnum=nums[0];
 3        int sum=0;
 4        for(int i=0;i<nums.size();i++){
 5            sum=0;
 6            for(int j=i;j<nums.size();j++){
 7                sum+=nums[j];
 8                if
(maxnum<sum) 9 maxnum=sum; 10 } 11 } 12 return maxnum; 13 }

2、動態規劃(84ms,70;66.2MB,38%)

時間複雜度:O(n):n為陣列元素個數

空間複雜度:O(1)

 1 int maxSubArray(vector<int>& nums) {
 2        int maxnum=nums[0];
 3        int sum=0;
 4        //注意這題只是為了得出最大和
 5        for
(auto x:nums){ 6 //若目前的數值和小於最新的x則將sum更新為最新的x 7 sum=sum+x>x? sum+x:x; 8 maxnum=maxnum>sum? maxnum:sum; 9 } 10 return maxnum; 11 }

3、貪心(92ms,49%;66.2MB,25%)

時間複雜度:O(n):n為陣列元素個數

空間複雜度:O(1)

 1 int maxSubArray(vector<int>& nums) {
 2       int
maxnum=nums[0]; 3 int sum=0; 4 //即使陣列全為負數,也會在sum歸0前得出一個最大的賦值到maxnum中 5 for(auto x:nums){ 6 sum+=x; 7 maxnum=maxnum>sum? maxnum:sum; 8 if(sum<0) 9 sum=0; 10 } 11 return maxnum; 12 }

4、分治法(看懂了,寫不出)