react native之ScrollView下拉重新整理效果
阿新 • • 發佈:2021-09-12
此部落格連結:
最大子序和
題目連結:https://leetcode-cn.com/problems/maximum-subarray/
題目
給定一個整數陣列 nums,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。
示例 1:
輸入:nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出:6
解釋:連續子陣列[4,-1,2,1] 的和最大,為6 。
示例 2:
輸入:nums = [1]
輸出:1
示例 3:
輸入:nums = [0]
輸出:0
示例 4:
輸入:nums = [-1]
輸出:-1
示例 5:
輸入:nums = [-100000]
輸出:-100000
題解
這題找最大子序和,注意這裡是必須連續的。本題使用動態規劃的思想,設dp表示當前元素能取的最大自序和,那麼怎麼找每個元素到目前為止的最大子序和呢?我們可以這樣想,當我們從前向後找最大的時候,如果前面的元素加上當前值比當前值小,那麼說明前面的就是累贅,我肯定取當前元素為dp的最大值,相反,如果當前元素加上前面的值比當前元素大,那麼說明當前的dp是前面的和加上當前元素作為當前的dp最大值。
程式碼
class Solution { public int maxSubArray(int[] nums) { if(nums.length==1) return nums[0]; int dp[]=new int [nums.length]; dp[0]=nums[0]; for(int i=1;i<nums.length;i++) { if(dp[i-1]+nums[i]<=nums[i]) { dp[i]=nums[i]; } else{ dp[i]=dp[i-1]+nums[i]; } // System.out.println(dp[i]); } int max=dp[0]; for(int i=0;i<dp.length;i++) { if(dp[i]>max){ max=dp[i]; } } return max; } }