具有最大Xor的SubArray

时间:2015-09-05 14:09:31

标签: java algorithm data-structures tree

我给了一个数组A我必须找到一个子数组,使得它的xor值最大。

我正在使用 Trie 。但我在某些测试用例中遇到时间限制超出错误。

我的时间复杂度 O(N * 30 * 2)

约束:

2 ≤ N ≤ 10^5
0 ≤ Ai ≤ 10^9

我的密码:Trie:

  static  class Batman{

    Batman[] N;
    long val;

    Batman(){
      N = new Batman[2];
      val=-1;
    }
  }

插入代码:

 public static void insert(int curr){

       Batman temp = Root;
      int[] A = new int[max+1];
      int currs = curr;
      for(int i=0;i<=max;i++)
      {
          A[i] = curr%2;
          curr/=2;
      }

       for(int i=max;i>=0;i--){

            if(temp.N[A[i]]==null){
                temp.N[A[i]] = new Batman();
            }

            temp = temp.N[A[i]];

       }
       temp.val = currs;


  }

我的查询代码:

  public static long google(int curr){
        long yes=0;

          Batman temp = Root;
          int[] A = new int[max+1];
          for(int i=0;i<=max;i++)
          {
              A[i] = curr%2;
              curr/=2;
          }

          for(int i=max;i>=0;i--){

              int t = 1-A[i];

              if(temp.N[t]!=null){    
                  temp = temp.N[t];
              }else
                  temp = temp.N[A[i]];


          }




        return temp.val;
  }

获取答案的代码:

insert(0);
xor=0;
for(int i=0;i<n;i++){
    xor^=A[i];

    insert(xor);
    long y = google(xor);

    y = y^xor;

    ans = Math.max(ans,y);

}

如何让它像Flash一样快速。

0 个答案:

没有答案