Minimum time to finish tasks without skipping two consecutive | arr [ ] represents time taken by n given tasks ; Corner Cases ; Initialize value for the case when there is only one task in task list . First task is included ; First task is exluded ; Process remaining n - 1 tasks ; Time taken if current task is included . There are two possibilities ( a ) Previous task is also included ( b ) Previous task is not included ; Time taken when current task is not included . There is only one possibility that previous task is also included . ; Update incl and excl for next iteration ; Return maximum of two values for last task ; Driver Code
function minTime ( arr , n ) { if ( n <= 0 ) return 0 ; let incl = arr [ 0 ] ; let excl = 0 ; for ( let i = 1 ; i < n ; i ++ ) { let incl_new = arr [ i ] + Math . min ( excl , incl ) ; let excl_new = incl ; incl = incl_new ; excl = excl_new ; } return Math . min ( incl , excl ) ; } let arr1 = [ 10 , 5 , 2 , 7 , 10 ] ; let n1 = arr1 . length ; document . write ( minTime ( arr1 , n1 ) + " " ) ; let arr2 = [ 10 , 5 , 7 , 10 ] ; let n2 = arr2 . length ; document . write ( minTime ( arr2 , n2 ) + " " ) ; let arr3 = [ 10 , 5 , 2 , 4 , 8 , 6 , 7 , 10 ] ; let n3 = arr3 . length ; document . write ( minTime ( arr3 , n3 ) + " " ) ;