鍔ㄦ极绠楁硶姊崇悊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鍔ㄦ极绠楁硶姊崇悊相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/_1__1_' title='++'>++   鏁扮粍涓嬫爣   浣嶇疆   鐤戦棶   鐗规畩   閾炬帴   tps   problem   font   

銆愬啓鍦ㄥ墠瑷€銆?/strong>

鏈€杩戝叧娉ㄤ簡濂藉嚑涓ソ鍙嬩笓闂ㄨ绠楁硶鐨勫叕涓诲彿锛岃刀鑴氳繕涓嶉敊锛屾湰鐫€鈥滃垎浜€濄€佲€滃叡杩涒€濈殑鍒濆績锛屽湪寰佸緱鏈汉鐨勫悓鎰忎箣涓嬶紝鐗规灏嗗師鍐呭缁忓師浣滆€呮湰浜哄悓鎰忔巿鏉冨悗锛岄噸鏂扮紪杈戙€佹帓鐗堛€佹暣鐞嗗埌姝ゅ銆?/p>

鍦ㄦ锛岀壒鍒劅璋㈠皬澶曞绠楁硶锛岃鍘ㄧ殑绠楁硶灏忓眿绛夊師鍒涗綔鑰呭ぇ鐗涖€?/p>

濂戒簡锛岃瘽涓嶅璇达紝鎴戣寮€鍚涔狅紝鍜屽ぇ瀹跺叡鍚岃繘姝ヤ簡锛屽樆鍢粇~~

 

銆愭鏂囧紑濮嬨€?/p>

鏈枃鎽樿嚜銆?strong>灏忓銆戯紝鐐瑰嚮鍙湅鍘熸枃

 

 涓?code>[1,2,3,4,5]鐨勪竴涓棆杞紝璇ユ暟缁勭殑鏈€灏忓€间负1銆?/span>

绀轰緥1锛?杈撳叆锛歔3,4,5,1,2]
杈撳嚭锛?/span>1

绀轰緥2锛?杈撳叆锛歔
2,2,2,0,1] 杈撳嚭锛?/span>0

鏉ユ簮锛氬姏鎵o紙LeetCode锛夈€佸墤鎸噊ffer11
閾炬帴锛?a href="https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof" target="_blank">https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof

 

鏈変汉璇达紝鍍忔垜涓嬮潰杩欐牱涓€涓惊鐜笉灏盇浜嗗悧锛熻€屼笖鍑昏触鐜?00%锛岃繕鏈変粈涔堢煡璇嗙偣锛?/p>

濡傛灉浣犱篃杩欐牱鎯筹紝閭e氨澶ч敊鐗归敊浜嗐€備笖鍚垜鎱㈡參閬撴潵~~~

鎶€鏈浘鐗? src=

 

 

 

閭d箞鐤戦棶鏉ヤ簡锛屼负浠€涔堣繖鏍峰啓涓嶆槸鏈€浼樼殑鍛紵

鍥犱负杩欏氨娑夊強鍒颁簡澶嶆潅搴︾殑闂锛屼竴鑸儏鍐典笅锛屽崟鐙竴涓猣or寰幆鐨勫鏉傚害鏄疧(n),浣嗘槸鏄庢樉鍦帮紝杩欓亾棰樹笉鏄浣犲幓寰幆鏁翠釜鏁扮粍鐨勩€?/p>

鍦ㄦ湁搴忔暟缁勪腑鏌ユ壘鏌愪釜鍏冪礌锛屼竴鑸緝濂界殑鏂规硶鏄簩鍒嗘硶锛屽洜涓轰簩鍒嗘硶鍙互灏嗗鏉傚害闄嶄负logN锛?/p>

 

閭d箞鍦ㄤ簩鍒嗘硶涓紝涓€鑸細鏈夋瘮杈冨熀鍑嗗€硷紝涔熷氨鏄痶arget锛屾湁瑙勫畾鐨勮瘽锛屽氨鎸夌収瑙勫畾鏉ュ彇锛屾病鏈夌殑璇濅竴鑸寜鐓ф渶宸︿晶鎴栨渶鍙充晶锛堜篃鍙О涓哄乏鍙崇鍊硷級鍙栦负target锛岃繖鍦ㄥ乏绁炵殑绠楁硶璇鹃噷璁茶繃锛?/p>

鍦ㄨ繖閬撻鐩腑鏄病鏈夌洰鏍囧€肩殑锛岄偅涔堢敤涓棿鍊煎拰浣庨珮浣嶏紙宸﹀彸绔€硷級杩涜姣旇緝锛岀湅澶勪簬鍓嶅崐閮ㄥ垎鐨勬槸閫掑搴忓垪杩樻槸鍚庡崐閮ㄥ垎鐨勬槸閫掑搴忓垪锛堟棆杞暟缁勶紝姣斿璇?code>[4,5,6,7,8,1,2,3]鍓嶅崐閮ㄥ垎鏄€掑搴忓垪[4,5,6,7,8]锛屽悗鍗婇儴鍒嗛€掑搴忓垪[1,2,3]锛夛紝杩涜鎿嶄綔缂╁皬鑼冨洿銆傜劧鍚庨€掑綊鍦ㄦ柊鐨勮寖鍥村唴鍐嶆鍒╃敤璇ユ€濇兂杩涜鏌ユ壘銆?/p>

 

鍦ㄨ繖閲屾垜娣诲姞涓€涓皬鏍楀瓙锛屾柟渚垮ぇ瀹堕槄璇伙細

姣斿锛氭暟缁刐4,5,6,7,8,1,2,3]锛屾暟缁勯暱搴︿负7锛屼腑闂村厓绱犳槸鏁扮粍闀?7/2=3锛屾墍鍦ㄤ綅缃殑鍏冪礌涓?銆傞偅涔堬紝灏辫鏁扮粍灏辫鍒嗕负涓ら儴鍒哰4,5,6,7]锛孾8,1,2,3]锛屽墠闈㈢殑鏁扮粍涓洪€掑锛屼笉鐢ㄧ锛屽悗闈㈢殑涓洪潪閫掑锛屾墍浠ヤ笅涓€娆″氨鍦ㄥ彸渚ф暟缁勯噷缁х画鏌ユ壘锛岄偅涔堝乏绔€煎厓绱犲氨鍙樹负8锛屽彸绔€煎厓绱犱笉鍙樿繕鏄?銆傝繖绉嶆儏鍐靛氨鏄湪鍙充晶鏌ユ壘锛?/p>

鍚屾牱鐨勮繕鏈夊湪宸︿晶鏁扮粍鏌ユ壘锛?/p>

姣斿鏁扮粍[7,8,1,2,3,4,5,6]锛屾暟缁勯暱搴︿负7锛屼腑闂村厓绱犳槸鏁扮粍闀?7/2=3锛屾墍鍦ㄤ綅缃殑鍏冪礌涓?銆傞偅涔堬紝灏辫鏁扮粍灏辫鍒嗕负涓ら儴鍒哰7,8,1,2]锛孾3,4,5,6]锛屽墠闈㈢殑鏁扮粍涓洪潪閫掑锛屽悗闈㈢殑涓洪€掑锛屼笉鐢ㄧ锛屾墍浠ヤ笅涓€娆″氨鍦ㄥ乏渚ф暟缁勯噷缁х画鏌ユ壘锛岄偅涔堝彸绔厓绱犲€煎氨鍙樹负2锛屽乏绔€煎厓绱犱笉鍙樿繕鏄?銆?/p>

杩欓噷鎴戜滑鎶妕arget 鐪嬩綔鏄?span class="Apple-converted-space">宸︾鐐?/strong>锛屾潵杩涜鍒嗘瀽锛岄偅灏辫鍒嗘瀽浠ヤ笅涓夌鎯呭喌锛岀湅鏄惁鍙互杈惧埌涓婅堪鐨勭洰鏍?

  • 鎯呭喌1锛屾暟缁勬槸[1,2,3,4,5],宸︾鐐筶eft鐨勬暟缁勪笅鏍囩瓑浜?锛屽彸绔偣right鏁扮粍涓嬫爣绛変簬4銆傛暟缁勬槸閫掑鏁扮粍锛屾病鏈夊彂鐢熸壄杞€傚張鍥犱负arr[left]<arr[right]锛屾墍浠ユ渶灏忓€煎氨鏄痑rr[left]锛?/li>
  • 鎯呭喌2锛屾暟缁勬槸[4,5,6,7,8,1,2,3],宸︾鐐筶eft鐨勬暟缁勪笅鏍囩瓑浜?锛屽彸绔偣right鏁扮粍涓嬫爣绛変簬7銆俛rr[left] > arr[right]锛屽彂鐢熶簡鎵浆銆傚張arr[mid] = 7 > arr[left] = 4锛?/code> target涔熷氨鏄痑rr[left]涓哄乏绔偣 4锛?span class="Apple-converted-space"> arr[mid] > target锛堜篃灏辨槸arr[left]锛?/code>, 璇存槑[first ... mid] 閮芥槸 >= target(涔熷氨鏄痑rr[left]) 鐨勶紝鍥犱负鍘熷鏁扮粍鏄潪閫掑噺锛屾墍浠ュ彲浠ョ‘瀹氱瓟妗堜负 [mid+1...last]鍖洪棿,鎵€浠?span class="Apple-converted-space"> left= mid + 1锛?/code>
  • 鎯呭喌3锛屾暟缁勬槸[5 6 1 2 3 4] ,宸︾鐐筶eft鐨勬暟缁勪笅鏍囩瓑浜?锛屽彸绔偣鏁扮粍涓嬫爣绛変簬5,mid涓嬫爣鏄?銆?code>arr[mid] = 1 < arr[right]=4 锛宎rr[mid] 涓?1锛?target涓哄彸绔偣 4锛?span class="Apple-converted-space"> arr[mid] < target锛坅rr[right]锛?/code>, 璇存槑绛旀鑲畾涓嶅湪[mid+1...right]锛屼絾鏄痑rr[mid] 鏈夊彲鑳芥槸绛旀,鎵€浠ョ瓟妗堝湪[first, mid]鍖洪棿锛屾墍浠ight = mid;
  • 鎯呭喌4锛?code>arr[mid] 鏃㈢瓑浜巃rr[left]鍙堢瓑浜巃rr[right]锛岄渶瑕佺壒娈婂鐞嗐€傝繘琛?code>left++锛屽鏋?code>arr[left] < arr[right] 閭d箞鐩存帴杩斿洖arr[left]銆?/span> 

 

濡傛灉涓婅堪杩樻病鐪嬫噦锛岃鐪嬩笅闈㈢殑瑙f瀽鍥撅細

浠rray = [4,5,6,7,8,1,2,3]涓轰緥锛氬0鏄庯細涓嬪浘涓殑high 鍜宺ight涓€鏍风殑鎰忔€濄€?/p>

鎶€鏈浘鐗? src=

 

 

 array[mid] = 7 > array[left] = 4鏄?span style="color: rgba(255, 0, 0, 1)">绗簩绉?/strong>鎯呭喌锛岀敱浜庨€掑鏈€灏忓€煎彧鍙兘鍦╩id鐨勫彸渚у尯闂达紝鏁呮柊鐨勫弬鏁帮細 left = mid+1 = 3+1 =4锛沵id = (left + high)/2 = 锛?+7锛?2 = 5  銆傛柊鐨勫浘鐢诲涓嬶細

鎶€鏈浘鐗? src=

 

 

  array[mid] = 5 < array[left] = 8鏄?span style="color: rgba(255, 0, 0, 1)">绗笁绉?/strong>鎯呭喌锛岀敱浜庨€掑鏈€灏忓€煎彧鍙兘鍦╩id鐨勫乏渚у尯闂达紙鍖呮嫭mid锛夛紝鏁呮柊鐨勫弬鏁帮細  high = mid = 5锛沵id = (left + high)/2 = 锛?+5锛?2 = 4 銆?/span>

鏂扮殑鍥剧敾濡備笅锛?/p>

鎶€鏈浘鐗? src=

 

 

 姝ゆ椂锛宎rray[mid] = 8 < array[left] = 8鏄?strong>绗洓绉?/strong>鎯呭喌锛屾柊鐨勫弬鏁板涓嬶細    left = left + 1 = 4+1 = 5 锛屾鏃?left = high锛屾晠鎵惧埌鏈€灏忓€硷紝涔熷氨鏄痑rray[5] = 1锛岃烦鍑哄惊鐜粨鏉熴€傚叾瀹炴柊鐨勫浘锛屼篃鍙涓嬬湅寰咃細

鎶€鏈浘鐗? src=

 

 绗洓绉嶆儏鍐碉紝鍗曠嫭灏唋eft++锛岀洰鐨勬槸涓轰簡闃叉鍍廩2,0,2,2,2]绫讳技浜庤繖鏍风殑鏁扮粍鍑虹幇銆?/p>

濡傛灉鍍忚繖鏍风殑鏁扮粍锛岄偅涔堬紝鏍规嵁鍓嶈堪锛屼竴寮€濮媋rray[left] = array[mid] 鐨勶紝鍓嶄笁绉嶆儏鍐甸兘涓嶇鍚堛€傛墍浠ラ渶瑕佺壒娈婂鐞嗭紝灏辨槸绗洓绉嶃€?/p>

鍏跺疄濂藉ソ鎯充竴鎯筹紝绗簩绉嶆槸array[left] < array[mid] 锛岀涓夌鏄痑rray[left] > array[mid] 锛屾墍浠ヨ偗瀹氳繕鏈変竴绉嶆槸array[left] = array[mid]銆備絾杩欎釜鏃跺€欎綘灏变笉鑳藉垽鏂渶灏忓€兼槸鍦ㄥ乏鍖洪棿杩樻槸鍙冲尯闂淬€傛瘮濡傦細鏁扮粍[2,0,2,2,2]涓紝鏈€灏忓€?灏辨槸鍦ㄥ乏鍖洪棿锛涙暟缁刐2,2,2,2,2,0,2,2]涓紝鏈€灏忓€?灏辨槸鍦ㄥ彸鍖洪棿鍐呫€傛墍浠ワ紝涓轰簡纭畾鏄湪鍝竴涓尯闂村唴锛屾垜浠彧濂藉皢left+1锛岃繖鏍锋柊鐨勬暟缁勪篃缂╁皬浜嗭紝灏卞彲浠ョ户缁瘮瀵癸紝缁х画鍒ゆ柇鏂扮殑array[left] 鍜宎rray[mid] 鐨勫ぇ灏忔潵纭畾鏈€灏忓€煎湪鍝竴渚с€傚師鏂囦腑鍏充簬杩欎竴鐐硅繕鏈夊浘鐢伙紝鎴戝湪杩欓噷灏变笉閲嶅鍙欒堪浜嗭紝涓嶆噦寰楀彲浠ョЩ姝ワ紝椤哄甫鍏虫敞涓€娉㈠師鍗氫富锛屽搱鍝堝搱~~~

 

 

Over銆傘€傘€?/p>

 

以上是关于鍔ㄦ极绠楁硶姊崇悊的主要内容,如果未能解决你的问题,请参考以下文章

绠楁硶-鍔ㄦ€佽鍒掞紙涓夛級

绠楁硶-鍔ㄦ€佽鍒掞紙鍥涳級

绠楁硶鍔ㄦ€佽鍒掞紙浜旓級-鑳屽寘闂2

绠楁硶鍔ㄦ€佽鍒掞紙涓冿級-鑳屽寘闂4

鍥剧殑绠楁硶---寮楁礇浼婂痉绠楁硶

绠楁硶鏁版嵁缁撴瀯01 /绠楁硶鏁版嵁缁撴瀯姒傝堪