package Ġle et code Ċ Ċ /** Ċ Ġ* Ġ 3 4 . Ġåľ¨ æİĴåºı æķ°ç»Ħ ä¸Ń æŁ¥æī¾ åħĥç´ł çļĦ ç¬¬ä¸Ģä¸ª åĴĮ æľĢåĲİ ä¸Ģä¸ª ä½įç½® Ċ Ġ* Ġhttps :// leetcode - cn . com / problems / find - first - and - last - position - of - element - in - sorted - array / Ċ Ġ* Ġ@ program : Ġle et code Ċ Ġ* Ġ@ description : Ġ${ description } Ċ Ġ* Ġ@ author : Ġhe w king Ċ Ġ* Ġ@ create : Ġ 2 0 1 9 - 1 0 - 2 8 Ġ 1 4 : 1 1 Ċ Ġ* Ġ ç»Ļ å®ļ ä¸Ģä¸ª æĮīçħ§ åįĩ åºı æİĴ åĪĹ çļĦ æķ´æķ° æķ°ç»Ħ Ġnums ï¼Į åĴĮ ä¸Ģä¸ª çĽ®æłĩ åĢ¼ Ġtarget ãĢĤ æī¾ åĩº ç»Ļ å®ļ çĽ®æłĩ åĢ¼ åľ¨ æķ°ç»Ħ ä¸ŃçļĦ å¼Ģå§ĭ ä½įç½® åĴĮ ç»ĵæĿŁ ä½įç½® ãĢĤ Ċ Ċ ä½łçļĦ ç®Ĺæ³ķ æĹ¶éĹ´ å¤įæĿĤ åº¦ å¿ħé¡» æĺ¯ Âł O ( log Ġn ) Ġ çº§åĪ« ãĢĤ Ċ Ċ å¦Ĥæŀľ æķ°ç»Ħ ä¸Ń ä¸įåŃĺåľ¨ çĽ®æłĩ åĢ¼ ï¼Į è¿ĶåĽŀ Âł [- 1 , Ġ- 1 ] ãĢĤ Ċ Ċ ç¤ºä¾ĭ Ġ 1 : Ċ Ċ è¾ĵåħ¥ : Ġnums Ġ= Ġ[ 5 , 7 , 7 , 8 , 8 , 1 0 ], Ġtarget Ġ= Ġ 8 Ċ è¾ĵåĩº : Ġ[ 3 , 4 ] Ċ ç¤ºä¾ĭ Âł 2 : Ċ Ċ è¾ĵåħ¥ : Ġnums Ġ= Ġ[ 5 , 7 , 7 , 8 , 8 , 1 0 ], Ġtarget Ġ= Ġ 6 Ċ è¾ĵåĩº : Ġ[- 1 ,- 1 ] Ċ Ċ æĿ¥ æºĲ ï¼ļ åĬĽ æī £ ï¼Ī LeetCode ï¼ī Ċ éĵ¾æİ¥ ï¼ļ https :// leetcode - cn . com / problems / find - first - and - last - position - of - element - in - sorted - array Ċ èĳĹ ä½ľ æĿĥ å½Ĵ é¢Ĩ æī £ ç½ĳç»ľ æīĢæľī ãĢĤ åķĨ ä¸ļ è½¬ è½½ è¯· èģĶç³» å®ĺæĸ¹ æİĪæĿĥ ï¼Į éĿŀ åķĨ ä¸ļ è½¬ è½½ è¯· æ³¨ æĺİ åĩº å¤Ħ ãĢĤ Ċ Ġ**/ Ċ Ċ object ĠFind First And Last Position Of Element In Sorted Array Ġ{ ĊĊĠĠĠ Ġclass ĠSolution Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æĢĿ è·¯ ï¼ļ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĽłä¸º é¢ĺ è®¾ è¦ģæ±Ĥ æĹ¶éĹ´ å¤įæĿĤ åº¦ O ( log Ġn ) Ġ çº§åĪ« ï¼Į å¹¶ä¸Ķ æĺ¯ å·² æİĴåºı ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æķ°ç»Ħ ï¼Į æīĢä»¥ éľĢè¦ģ çĶ¨ åĪ° äºĮ åĪĨ æŁ¥æī¾ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 1 . Ġæľī åı¯èĥ½ æī¾åĪ° çļĦåĢ¼ å¤Ħ äºİ çĽ¸åĲĮ åĢ¼çļĦ ä¸ŃéĹ´ éĥ¨åĪĨ æ¯Ķå¦Ĥ Ġ[ 5 ï¼Į 7 ï¼Į 7 ï¼Į 7 ï¼Į 8 ï¼Į 1 0 ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ äºĮ åĪĨ æŁ¥æī¾ æī¾åĪ° çļĦæĺ¯ ä¸īä¸ª 7 éĩĮ éĿ¢çļĦ ä¸ŃéĹ´ ä¸Ģä¸ª ï¼Į éĤ£ä¹Ī éľĢè¦ģ å¾ªçİ¯ çĽ¸ åĩı ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æī¾åĪ° first ï¼Į å¾ªçİ¯ çĽ¸ åĬł æī¾åĪ° last ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġsearch Range ( nums : ĠInt Array , Ġtarget : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġbinary Ser ach ( nums , target ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġint ArrayOf (- 1 ,- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfirst Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( first Ġ> Ġ 0 Ġ&& Ġnums [ first Ġ- Ġ 1 ] Ġ== Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( last Ġ< Ġnums . size Ġ- Ġ 1 Ġ&& Ġnums [ last Ġ+ Ġ 1 ] Ġ== Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġint ArrayOf ( first , last ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbinary Ser ach ( nums : IntArray , target : ĠInt ) Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlow Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhigh Ġ= Ġnums . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( low Ġ<= Ġhigh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm Ġ= Ġ( low Ġ+ Ġhigh ). div ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnums [ m ] Ġ== Ġtarget Ġ-> Ġreturn Ġm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnums [ m ] Ġ< Ġtarget Ġ-> Ġlow Ġ= Ġm Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnums [ m ] Ġ> Ġtarget Ġ-> Ġhigh Ġ= Ġm Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }