@above

Correction..
i can be <= R... hence, which can be found as part of traversal..

Another addition:
I have explained the concept using A[j] to be max.. In case A[j] is
min, then we will take a similar approach keeping in mind that R will
be closest but in terms of finding the max element..

On 31 Dec, 20:08, Lucifer <sourabhd2...@gmail.com> wrote:
> O(N^2) approach..
> -----------------------------------
>
> Say the current start index is i..
> Then starting from i keep track of the min and max element and ensure
> that the diff of max and min is <=K.
> Say the diff exceeds at index j, then the current continuous subarray
> size would be (j - i) and we will compare it against the previously
> recorded maximum value.
>
> Code:
> -------------
> Say the given array of integers is represented by A[N] and the diff is
> represented by K.
>
> int currMax = 0;
> int strtInd = -1;
> int endInd = -1;
>
> for( int i =0; i < N; ++i)
> {
>    int j = i;
>    int min = A[i] , min = A[i];
>    while ( ++j < N )
>    {
>       if ( A[j] < min)
>          min = A[j];
>       else if (A[j] > max)
>          max = A[j];
>       else
>         continue;
>
>       if (max - min > k)
>          break;
>    }
>    if ( (j - i) > currMax)
>    {
>       currMax = j - i;
>       strtInd = i;
>       endInd = j-1;
>    }
>   // Break if true,
>   // as we know that it is the max size
>   // that we can get..
>   if ( j==N)
>     break;
>
> }
>
> printf(" Max subarray size :%d, Start Index : %d, End Index : %d",
> currMax, strtInd, endInd);
>
> -----------------------------------------------------------------
>
> An optimized O(N^2) approach to reduce the no. of computations :-
>
> Once the inner loop breaks, instead of starting from the next start
> index i.e 'i+1' we can optimize on it as follows:
>
> Say, the index 'j' at which the inner loop breaks was due to a new max
> value i.e. A[j].
>
> Now, to readjust the start index for the next iteration we will
> traverse elements from index 'i+1' to 'j-1' to get the closest value
> to (A[j] - K), which is also >= (A[j] - K).
>
> Say, the index of the closest value found is R, then for the next
> iteration the start values will be initialized as follows..
> i = R;
> j = current value of j + 1 , as R to j already satisfies the
> 'difference of K' condition.
> min = A[R];
> max = A[j];
>
> ------------------------------------------------------
>
> Based on above 2nd approach i could think of a NlogN algorithm which i
> will post next..
>
> --------------------------------------------------------
>
> On 27 Dec, 22:00, top coder <topcode...@gmail.com> wrote:
>
>
>
>
>
>
>
> > Find the longest continuous subsequence of numbers in an unsorted
> > array such that difference between any two nos. in that sequence
> > should not be more than K.
> > For example:
> >  2,1,8,12, 10,15, 13, 25 and k=7
>
> > 8,12,10,15,13 is the sequence (15-8=7)

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to