实现一个动态规划算法,并分析其时间复杂度和空间复杂度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class DynamicProgrammingExample { public static int maxSubArray(int[] nums) { int n = nums.length; int[] dp = new int[n]; dp[0] = nums[0]; int max = dp[0];
for (int i = 1; i < n; i++) { dp[i] = Math.max(nums[i], nums[i] + dp[i - 1]); max = Math.max(max, dp[i]); }
return max; } }
|
代码中实现了一个求解最大子序和的动态规划算法。算法的思想是先定义一个状态数组dp,然后通过遍历原始数组来不断更新状态数组,最终得到最优解。
时间复杂度分析:
对于这个算法,我们需要遍历一遍整个原始数组,所以时间复杂度为O(n)
,其中n是数组的长度。
空间复杂度分析:
算法的空间复杂度主要来自于状态数组dp,它需要存储原始数组中每个位置的最大子序和。所以空间复杂度为O(n)
,其中n是数组的长度。
验证:
1 2 3 4 5
| public static void main(String[] args) { int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4}; int result = maxSubArray(nums); System.out.println(result); }
|