Блог пользователя abhinavxd

Автор abhinavxd, история, 4 года назад, По-английски

Find the maximum length of the subsequence such that XOR of each consecutive element is equal to k. example: [3,2,4,3,5] and k=1. Answer = 3, subsequence = [3,2,3]

And for [1,2,5,7,9,8,5] ans would be 3.

So far I have tried these approaches :

A naive two-loop solution where we will use two loops and find the subsequence with XOR equals to k.

2.Second I am thinking of dynamic programming where I can store XOR of already calculated subsequence but I am not able to complete the algorithm.

Can someone please tell me some other way of solving this problem?

Thanks

  • Проголосовать: нравится
  • -4
  • Проголосовать: не нравится

»
4 года назад, # |
Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

If consecutive 2 elements are x and y then x^y=k, that means k^x=y, then it means you will have array with period of 2 like [3,2,3,2,3,2], i think this can be easily solved for every pair $$$O(N)$$$ or $$$O(Nlog(N)$$$ by two pointers

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Constraints?

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Calculate $$$pref[N$$$] where $$$pref[i] = a_0 ⊕ a_1 ⊕ ... ⊕ a_i$$$. Then for each prefix $$$i$$$ we can find shortest inner prefix $$$j$$$ such that $$$a_{j+1} ⊕ ... ⊕ a_i$$$. Create map<int, int> $$$m$$$ and for each possible $$$x$$$ store smallest $$$i$$$ such that $$$pref[i] = x$$$. Now iterate $$$i = 0...n-1$$$ and for each $$$i$$$ if $$$k ⊕ pref[i]$$$ is present in $$$m$$$ then say $$$ans = max(ans, i - m[k ⊕ pref[i]] + 1)$$$