喵喵~: Maximum subarray@leetcode



Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.
int maxSubArray(int A[], int n) {
int sum = 0, max = INT_MIN;
for(int i=0; i<n; i++){
sum+=A[i];
if(sum>max)
max = sum;
if(sum<0)
sum = 0;
}
return max;
}
};
DP: Using extra O(n) space, Code from http://www.programcreek.com/2013/02/leetcode-maximum-subarray-java/
public int maxSubArray(int[] A) {
  int max = A[0];
  int[] sum = new int[A.length];
  sum[0] = A[0];
 
  for (int i = 1; i < A.length; i++) {
   sum[i] = Math.max(A[i], sum[i - 1] + A[i]);
   max = Math.max(max, sum[i]);
  }
 
  return max;
}
Dive and Conquer: O(nlogn)
int maxSubArray(int A[], int n) {
  // Start typing your C/C++ solution below
  // DO NOT write int main() function
  int maxV = INT_MIN;
  return maxArray(A, 0, n-1, maxV);    
}
int maxArray(int A[], int left, int right, int& maxV)
{
  if(left>right)
return INT_MIN;
  int mid = (left+right)/2;
  int lmax = maxArray(A, left, mid -1, maxV);
  int rmax = maxArray(A, mid + 1, right, maxV);
  maxV = max(maxV, lmax);
  maxV = max(maxV, rmax);
  int sum = 0, mlmax = 0;
  for(int i= mid -1; i>=left; i--)
  {
sum += A[i];
if(sum > mlmax)
  mlmax = sum;
  }
  sum = 0; int mrmax = 0;
  for(int i = mid +1; i<=right; i++)
  {
sum += A[i];
if(sum > mrmax)
  mrmax = sum;
  }
  maxV = max(maxV, mlmax + mrmax + A[mid]);
  return maxV;
}
Read full article from 喵喵~: Maximum subarray@leetcode

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts