C++反射实现方法设想(二)

2013-09-26 19:58:18 · 作者: · 浏览: 440

 

  java   public static int run(int [] a);

  */

  #include <stdio.h>

  #include <stdlib.h>

  #define M 1000000007

  int run(const int *a,int n)

  {

  long long SubArray[120] = {0};

  int LastIndex[120] = {0};

  int iter = 0;

  for(iter = 1; iter <= n; iter++)

  {

  switch(LastIndex[a[iter - 1]])

  {

  case 0:

  {

  SubArray[iter] = (2 * SubArray[iter - 1] + 1) % M;

  break;

  }

  default:

  {

  SubArray[iter] = (2 * SubArray[iter - 1] - SubArray[LastIndex[a[iter - 1]] - 1] + M) % M;

  break;

  }

  }

  LastIndex[a[iter - 1]] = iter;

  }

  return SubArray[n] % M;

  }

  int main(void)

  {

  //int a = {1, 2, 2, 3 ,3};

  int a = {1, 2, 3 , 2};

  printf("the result is %d\n", run(a, 4));

  return 0;

  }