Algorithm for Permutation and Subarray

Algorithm for Permutation and Subarray

print all permutations of a given string. A permutation, also called an “arrangement number” or “order,” is a rearrangement of the elements of an ordered list S into a one-to-one correspondence with S itself. A string of length n has n! permutation.

# include <stdio.h>
  
/* Function to swap values at two pointers */
void swap ( char *x, char *y)
{
     char temp;
     temp = *x;
     *x = *y;
     *y = temp;
}
   
/* Function to print permutations of string
    This function takes three parameters:
    1. String
    2. Starting index of the string
    3. Ending index of the string. */
void permute( char *a, int i, int n) 
{
    int j; 
    if (i == n)
      printf ( "%s\n" , a);
    else
    {
         for (j = i; j <= n; j++)
        {
           swap((a+i), (a+j));
           permute(a, i+1, n);
           swap((a+i), (a+j)); //backtrack
        }
    }
  
/* Driver program to test above functions */
int main()
{
    char a[] = "ABC" ;  
    permute(a, 0, 2);
    getchar ();
    return 0;
}

2. find the sum of contiguous subarray within a one-dimensional array of numbers which has the largest sum.

#include<stdio.h>
int maxSubArraySum( int a[], int size)
{
    int max_so_far = 0, max_ending_here = 0;
    int i;
    for (i = 0; i < size; i++)
    {
      max_ending_here = max_ending_here + a[i];
      if (max_ending_here < 0)
         max_ending_here = 0;
      if (max_so_far < max_ending_here)
         max_so_far = max_ending_here;
     }
     return max_so_far;
 
/*Driver program to test maxSubArraySum*/
int main()
{
    int a[] = {-2, -3, 4, -1, -2, 1, 5, -3};
    int max_sum = maxSubArraySum(a, 8);
    printf ( "Maximum contiguous sum is %d\n" , max_sum);
    getchar ();
    return 0;
}

你可能感兴趣的:(Algorithm for Permutation and Subarray)