Longest Consecutive Subsequence in ABAP
Suppose we have an array of integers. We have to find the length of the longest consecutive elements sequence. So if the input is like [100, 4, 250, 1, 3, 2,101], answer will be 4, as the longest consecutive sequence is [1,2,3,4].
REPORT ZLNGCONSUB.
TYPES: BEGIN OF ty_arr,
num TYPE i,
END OF ty_arr.
TYPES: BEGIN OF ty_max,
num TYPE i,
len TYPE i,
END OF ty_max.
DATA: ls_arr TYPE ty_arr,
ls_arr2 TYPE ty_arr,
lt_arr TYPE SORTED TABLE OF ty_arr WITH UNIQUE KEY num,
ls_max_t TYPE ty_max,
ls_max TYPE ty_max,
lv_num TYPE i.
lt_arr = VALUE #( ( num = 100 ) ( num = 3 ) ( num = 5 ) ( num = 101 ) ( num = 4 ) ( num = 2 )
( num = 1 ) ( num = 98 ) ( num = 102 ) ( num = 99 ) ( num = 111 ) ( num = 9 )
( num = 13 ) ( num = 14 ) ( num = 15 ) ( num = 16 ) ( num = 8 ) ( num = 17 )
( num = 88 ) ( num = 80 ) ( num = 97 )
).
ls_max-num = 0.
ls_max-len = 0.
READ TABLE lt_arr INTO ls_arr INDEX 1.
ls_max_t-num = ls_arr-num.
ls_max_t-len = 1.
CLEAR ls_arr.
LOOP AT lt_arr INTO ls_arr.
IF ls_max_t-len = 0.
ls_max_t-num = ls_arr-num.
ls_max_t-len = 1.
ENDIF.
lv_num = ls_arr-num + 1.
READ TABLE lt_arr INTO ls_arr2 WITH KEY num = lv_num.
IF sy-subrc EQ 0.
ls_max_t-len = ls_max_t-len + 1.
ELSE.
IF ls_max_t-len > ls_max-len.
ls_max-num = ls_max_t-num.
ls_max-len = ls_max_t-len.
ENDIF.
ls_max_t-len = 0.
ENDIF.
ENDLOOP.
WRITE:/ 'Consecutive Subsequence starts: ', ls_max-num, 'and the length is: ', ls_max-len.