<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          二分查找兩種實(shí)現(xiàn),附詳細(xì)注釋

          共 626字,需瀏覽 2分鐘

           ·

          2020-10-30 05:03

          二分查找問題描述

          給定一個??個元素有序的(升序)整型數(shù)組? 和一個目標(biāo)值? ?,寫一個函數(shù)搜索??中的 ,如果目標(biāo)值存在返回下標(biāo),否則返回 -1。

          示例 1:

          輸入:?nums?=?[-1,0,3,5,9,12],?target?=?9
          輸出:?4
          解釋:?9?出現(xiàn)在?nums?中并且下標(biāo)為?4

          示例?2:

          輸入:?nums?=?[-1,0,3,5,9,12],?target?=?2
          輸出:?-1
          解釋:?2?不存在?nums?中因此返回?-1

          來源:力扣(LeetCode)

          鏈接:https://leetcode-cn.com/problems/binary-search

          2 解法1:左閉右開

          使用區(qū)間:左閉右開,詳細(xì)思路見文中代碼注釋:

          class?Solution(object):
          ????def?search(self,?nums,?target):
          ????????#?剛開始的取值區(qū)間:[0,len(nums)?)
          ????????left,right=0,len(nums)
          ????????while?right?-?left?>?1:
          ????????????mid?=?(left+right)?//2
          ????????????#?nums[0]<=...
          ????????????if?nums[mid]?<=?target:
          ????????????????#?遍歷后區(qū)間改變?yōu)椋篬mid,right)
          ????????????????left?=?mid
          ????????????else:
          ????????????????#?nums[right-1]...>=nums[mid+1]>=nums[mid]?>?target
          ????????????????#?區(qū)間調(diào)整為:[left,right)
          ????????????????right?=?mid
          ????????#?迭代結(jié)束后
          ????????#?right-left=1,區(qū)間為[left,?right=left+1)????????
          ????????#?即nums[left]就是二分后逼近的點(diǎn)
          ????????#?判斷nums[left]是否等于target即可
          ????????return?left?if?nums[left]?==?target?else?-1

          2 解法2:左閉右閉

          class?Solution(object):
          ????def?search(self,?nums,?target):
          ????????#?左右都是閉合區(qū)間的寫法
          ????????#?剛開始的取值區(qū)間:[0,len(nums)-1]
          ????????left,right=0,len(nums)-1
          ????????while?left?<=?right:
          ????????????mid?=?(left+right)?//2
          ????????????if?nums[mid]?==?target:
          ????????????????return?mid
          ????????????#?nums[0]<=...
          ????????????elif?nums[mid]?????????????????#?遍歷后區(qū)間改變?yōu)椋篬mid+1,right]
          ????????????????left?=?mid?+?1?
          ????????????else:
          ????????????????#?nums[right-1]...>=nums[mid+1]>=nums[mid]?>?target
          ????????????????#?區(qū)間調(diào)整為:[left,mid-1]
          ????????????????right?=?mid-1
          ????????#?迭代結(jié)束后
          ????????# left - right = 1,此時區(qū)間[left,right]?=?[left,left-1]變?yōu)榭眨?/span>
          ????????#?所以返回?-1
          ????????return?-1

          二分查找,是最基本的分支法的一個應(yīng)用,面試中被問道的頻率很高,同時邊界取值特別容易出錯,所以單獨(dú)寫為一篇文章,帶有詳細(xì)的注釋,希望將來面試能幫助到你一點(diǎn)。覺得還可以,可否點(diǎn)個贊。

          算法參考書

          如果你的英文還不錯,可以學(xué)習(xí)下面這本算法分析書,幾乎從0開始教會你算法的基本概念,數(shù)據(jù)結(jié)構(gòu),然后基本的算法設(shè)計(jì)技術(shù),常用到的比如分治、貪心、動歸、回溯、分治定界、隨機(jī)算法等。

          掌握這300頁,不管你是軟件設(shè)計(jì)、算法設(shè)計(jì)、數(shù)據(jù)分析、爬蟲等,基本的算法思想算是掌握了,大家加油!

          若有需求,加我微信,備注 算法

          瀏覽 43
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  肏逼亚洲| 18禁成人免费网站 | 丝袜一级片| 狠狠色伊人 | 91爰爱 |