二分查找
二分搜尋是一種重複將搜尋空間一分為二的演算法。這種搜尋技術遵循分而治之的策略。每次迭代中搜尋空間總是減少一半。導致時間複雜度為 O(log(n)),其中 n 為元素數。
條件:陣列應該是排序的,但它們也可以應用於單調函數,我們需要找到單調遞增或單調遞減。
當我們需要以對數時間縮小搜尋空間時,它就有效。
我們使用兩個指針,左指針和右指針。取左右的平均值來找出中間元素。
現在,我們根據條件檢查應該將左右指針移到哪裡。
解決一個問題主要需要三個步驟:
- 預處理: 如果輸入未排序,則對輸入進行排序。
- 二分查找:使用兩個指標並找到中間部分來劃分搜尋空間,然後相應地選擇正確的一半。
- 後處理:決定輸出。
二分搜尋演算法的優點 - 對於大數據,二分搜尋比線性搜尋更快,因為它每次將數組切成兩半,而不是逐一檢查每個元素。這使得它更快、更有效率。
限制:二分查找僅適用於已排序的數組,因此對於小型未排序數組效率不高,因為排序需要額外的時間。對於小型記憶體搜索,它的效果也不如線性搜索。
應用: 用於在排序數組中搜尋元素,時間複雜度為 O(log(n)),也可用於尋找數組中的最小或最大元素。
基本二分查找程式碼 -
程式碼
def binarySearch(nums, target): if len(nums) == 0: return -1 left, right = 0, len(nums) - 1 while left right return -1
33。在旋轉排序數組中搜尋
給定可能旋轉後的陣列 nums 和整數目標,如果目標在 nums 中,則傳回目標索引,如果不在 nums 中,則傳回 -1。
您必須編寫一個運行時間複雜度為 O(log n) 的演算法。
範例1:
輸入:nums = [4,5,6,7,0,1,2],目標 = 0
輸出:4
範例2:
輸入:nums = [4,5,6,7,0,1,2],目標 = 3
輸出:-1
範例3:
輸入:nums = [1],目標 = 0
輸出:-1
程式碼
def binarySearch(nums, target): if len(nums) == 0: return -1 left, right = 0, len(nums) - 1 while left right return -1
- 使用左右兩個指針,迭代直到它們重疊。
- 找出中間元素。
- 由於陣列已排序但已旋轉,我們不能簡單地將左側或右側的元素與中間的元素進行比較。
- 首先,透過比較中指標與左指標或右指標來決定左部分或右部分排序。
- 根據這個結論,相應地調整指針。
時間複雜度 - O(log(n)),因為搜尋空間在每次迭代中被分成兩半。
空間複雜度 - O(1)
單調遞增
162。求峰值元素
峰值元素是嚴格大於其鄰居的元素。
給定一個 0 索引的整數數組 nums,找到一個峰值元素,並傳回其索引。如果數組包含多個峰值,則傳回任意峰值的索引。
您可能會想像 nums[-1] = nums[n] = -∞。換句話說,一個元素總是被認為嚴格大於數組外部的鄰居。
您必須編寫一個在 O(log n) 時間內執行的演算法。
範例1:
輸入:nums = [1,2,3,1]
輸出:2
說明:3 是峰值元素,您的函數應傳回索引號 2。
範例2:
輸入:nums = [1,2,1,3,5,6,4]
輸出:5
說明:您的函數可以傳回索引號 1(峰值元素為 2)或索引號 5(峰值元素為 6)。
程式碼
class Solution: def search(self, nums: List[int], target: int) -> int: left = 0 right = len(nums)-1 while left = nums[left]: # if nums[mid]= nums[left]: if nums[left] <ol> <li>在此類問題中,我們需要透過比較中間的左側或右側元素來檢查峰值。 </li> <li>這有助於確定圖表趨勢是向上還是向下。 </li> <li>要找出最大值,請搜尋向上的斜率並探索正確的子空間。 </li> <li>要找出最小值,請搜尋左側子空間</li> </ol> <p><strong>時間複雜度 - O(log(n))</strong>,因為搜尋空間在每次迭代中被分成兩半。 <br> <strong>空間複雜度 - O(1)</strong></p>
以上是二分查找 ||蟒蛇 ||資料結構和演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

SlicingaPythonlistisdoneusingthesyntaxlist[start:stop:step].Here'showitworks:1)Startistheindexofthefirstelementtoinclude.2)Stopistheindexofthefirstelementtoexclude.3)Stepistheincrementbetweenelements.It'susefulforextractingportionsoflistsandcanuseneg

numpyallowsforvariousoperationsonArrays:1)basicarithmeticlikeaddition,減法,乘法和division; 2)evationAperationssuchasmatrixmultiplication; 3)element-wiseOperations wiseOperationswithOutexpliitloops; 4)

Arresinpython,尤其是Throughnumpyandpandas,weessentialFordataAnalysis,offeringSpeedAndeffied.1)NumpyArseNable efflaysenable efficefliceHandlingAtaSetSetSetSetSetSetSetSetSetSetSetsetSetSetSetSetsopplexoperationslikemovingaverages.2)

列表sandnumpyArraysInpythonHavedIfferentMemoryfootprints:listSaremoreFlexibleButlessMemory-效率,而alenumpyArraySareSareOptimizedFornumericalData.1)listsStorReereReereReereReereFerenceStoObjects,with withOverHeadeBheadaroundAroundaround64byty64-bitsysysysysysysysysyssyssyssyssysssyssys2)

toensurepythonscriptsbehavecorrectlyacrycrosdevelvermations,分期和生產,USETHESTERTATE:1)Environment varriablesForsimplesettings,2)configurationfilesfilesForcomPlexSetups,3)dynamiCofforComplexSetups,dynamiqualloadingForaptaptibality.eachmethodoffersuniquebeneiquebeneqeniquebenefitsandrefitsandrequiresandrequiresandrequiresca

Python列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1
好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境