Buy and sell stock - Leetcode question
http://www.geeksforgeeks.org/largest-sum-contiguous-subarray/
It is Dynamic programming problem.
Check Kadane's algorithm:
Question and Answer Time:
Question: What do you learn through the study?
Answer: This is a dynamic programming problem. Use two variables to track the statistics:
One is called maximum value ending here. max_ending_here;
Another one is called maximum value so far. max_so_far.
Let us walk through the code:
int maxSubArraySum(int a[], int size){ int max_so_far = 0, max_ending_here = 0; for (int i = 0; i < size; i++) { max_ending_here = max_ending_here + a[i]; if (max_ending_here < 0) max_ending_here = 0; /* Do not compare for all elements. Compare only when max_ending_here > 0 */ else if (max_so_far < max_ending_here) max_so_far = max_ending_here; } return max_so_far;}Handle the case when all numbers in the array are negative:
int maxSubArraySum(int a[], int size){ int max_so_far = a[0]; int curr_max = a[0]; for (int i = 1; i < size; i++) { curr_max = max(a[i], curr_max+a[i]); max_so_far = max(max_so_far, curr_max); } return max_so_far;}
No comments:
Post a Comment