package Ġle et code . kotlin . array . easy Ċ Ċ import Ġkotlin . math . max Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġprintln ( max Profit 2 ( int ArrayOf ( 7 , Ġ 1 , Ġ 5 , Ġ 3 , Ġ 6 , Ġ 4 ))) ĊĠĠĠ Ġprintln ( max Profit 2 ( int ArrayOf ( 7 , Ġ 6 , Ġ 4 , Ġ 3 , Ġ 1 ))) ĊĊĠĠĠ Ġprintln ( max Profit 3 ( int ArrayOf ( 7 , Ġ 1 , Ġ 5 , Ġ 3 , Ġ 6 , Ġ 4 ))) ĊĠĠĠ Ġprintln ( max Profit 3 ( int ArrayOf ( 7 , Ġ 6 , Ġ 4 , Ġ 3 , Ġ 1 ))) Ċ } Ċ Ċ /** Ċ Ġ* ĠTry Ġwith Ġbuy Ġstock Ġon Ġeach Ġday Ġand Ġcheck Ġthe Ġprofit Ġif Ġwe Ġsell Ġit Ġon Ċ Ġ* Ġevery Ġright Ġside Ġof Ġit , Ġret aining Ġmax Ġprofit Ġfound Ġso Ġfar Ċ Ġ*/ Ċ private Ġfun Ġmax Profit ( prices : ĠInt Array ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġmax Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. prices . size Ġ- Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġi Ġ+ Ġ 1 .. prices . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġmax ( max , Ġprices [ j ] Ġ- Ġprices [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġmax Ċ } Ċ Ċ private Ġfun Ġmax Profit 2 ( prices : ĠInt Array ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġmax ending here Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġmax so far Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. prices . last Index ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmax ending here Ġ+= Ġprices [ i ] Ġ- Ġprices [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġmax ending here Ġ= Ġmax ( 0 , Ġmax ending here ) ĊĠĠĠĠĠĠĠ Ġmax so far Ġ= Ġmax ( max so far , Ġmax ending here ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġmax so far Ċ } Ċ Ċ /** Ċ Ġ* ĠIterate Ġfrom Ġleft Ġto Ġright , Ġtry Ġsell ing Ġat Ġevery Ġpoint Ġret aining Ġmax Ġprofit Ġfound Ġso Ġfar , Ċ Ġ* Ġand Ġmin Ġfound Ġso Ġfar . Ċ Ġ*/ Ċ private Ġfun Ġmax Profit 3 ( arr : ĠInt Array ): ĠInt Ġ{ ĊĠĠĠ Ġif Ġ( arr . isEmpty ()) Ġreturn Ġ 0 ĊĠĠĠ Ġvar Ġmin Ġ= Ġarr [ 0 ] ĊĠĠĠ Ġvar Ġans Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. arr . last Index ) Ġ{ ĊĠĠĠĠĠĠĠ Ġans Ġ= ĠMath . max ( ans , Ġarr [ i ] Ġ- Ġmin ) ĊĠĠĠĠĠĠĠ Ġmin Ġ= ĠMath . min ( min , Ġarr [ i ]) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġans Ċ } Ċ