python-leetcode 66.尋找旋轉排序數組中的最小值

題目:

已知一個長度為n的數組,預先按照升序排列,經由1到n次旋轉后,得到輸入數組,例如,原數組?nums = [0,1,2,4,5,6,7]?在變化后可能得到:

  • 若旋轉?4?次,則可以得到?[4,5,6,7,0,1,2]
  • 若旋轉?7?次,則可以得到?[0,1,2,4,5,6,7]

注意,數組?[a[0], a[1], a[2], ..., a[n-1]]?旋轉一次?的結果為數組?[a[n-1], a[0], a[1], a[2], ..., a[n-2]]?

給定一個元素互不相同的數組nums,它原來是一個升序排列的數組,并按上述情形進行了多次旋轉,找出并返回數組中的最小元素。

?


題目:二分查找

一個不包含重復元素的升序數組在經過旋轉之后,可以得到下面可視化的折線圖:

?其中橫軸表示數組元素的下標,縱軸表示數組元素的值。圖中標出了最小值的位置,是我們需要查找的目標。

考慮數組中的最后一個元素x::在最小值右側的元素(不包括最后一個元素本身),它們的值一定都嚴格小于?x;而在最小值左側的元素,它們的值一定都嚴格大于?x。因此可以通過二分查找的方法找出最小值。

在二分查找的每一步中,左邊界為?low,右邊界為?high,區間的中點為?pivot,最小值就在該區間內。將中軸元素?nums[pivot]?與右邊界元素?nums[high]?進行比較,

可能會有以下的三種情況:

第一種情況是?nums[pivot]<nums[high]。如下圖所示,這說明?nums[pivot]?是最小值右側的元素,因此我們可以忽略二分查找區間的右半部分。

第二種情況是 nums[pivot]>nums[high]。如下圖所示,這說明 nums[pivot] 是最小值左側的元素,因此我們可以忽略二分查找區間的左半部分。

?

由于數組不包含重復元素,并且只要當前的區間長度不為 1,pivot 就不會與 high 重合;而如果當前的區間長度為 1,這說明我們已經可以結束二分查找了。因此不會存在 nums[pivot]=nums[high] 的情況。

當二分查找結束時,就得到了最小值所在的位置。

class Solution(object):def findMin(self, nums):""":type nums: List[int]:rtype: int"""low,high=0,len(nums)-1 #初始化兩個指針low和high,分別指向數組的開始(0)和結束位置while low<high:#當low指針小于high指針時繼續循環mid=low+(high-low)//2  #計算中間位置if nums[mid]<nums[high]: #說明最小值在左半部分high=mid  #將右指針移動到中間位置else: #說明最小值在右半部分low=mid+1return nums[low]  #low == high,指向的就是最小值的位置

時間復雜度為: O(logn),其中?n?是數組?nums?的長度

空間復雜度:O(1)

源自力扣官方題解
?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900645.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900645.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900645.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MATLAB第113期】基于MATLAB的EFAST擴展傅里葉幅度敏感性分析方法(有目標函數)

【MATLAB第113期】基于MATLAB的EFAST擴展傅里葉幅度敏感性分析方法&#xff08;有目標函數&#xff09; 一、方法概述 擴展傅里葉幅度敏感性檢驗&#xff08;EFAST&#xff09;是一種基于頻域分析的全局敏感性分析方法&#xff0c;能夠同時評估模型參數的一階敏感性&#xff…

Tiktok 關鍵字 視頻及評論信息爬蟲(1) [2025.04.07]

&#x1f64b;?♀?Tiktok APP的基于關鍵字檢索的視頻及評論信息爬蟲共分為兩期&#xff0c;希望對大家有所幫助。 第一期見下文。 第二期&#xff1a;基于視頻URL的評論信息爬取 1. Node.js環境配置 首先配置 JavaScript 運行環境&#xff08;如 Node.js&#xff09;&#x…

【愚公系列】《高效使用DeepSeek》058-選題策劃

??【技術大咖愚公搬代碼:全棧專家的成長之路,你關注的寶藏博主在這里!】?? ??開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主! ?? 江湖人稱"愚公搬代碼",用七年如一日的精神深耕技術領域,以"…

零基礎教程:Windows電腦安裝Linux系統(雙系統/虛擬機)全攻略

一、安裝方式選擇 方案對比表 特性雙系統安裝虛擬機安裝性能原生硬件性能依賴宿主機資源分配磁盤空間需要獨立分區&#xff08;建議50GB&#xff09;動態分配&#xff08;默認20GB起&#xff09;內存占用獨占全部內存需手動分配&#xff08;建議4GB&#xff09;啟動方式開機選…

LeetCode 2968.執行操作使頻率分數最大

給你一個下標從 0 開始的整數數組 nums 和一個整數 k 。 你可以對數組執行 至多 k 次操作&#xff1a; 從數組中選擇一個下標 i &#xff0c;將 nums[i] 增加 或者 減少 1 。 最終數組的頻率分數定義為數組中眾數的 頻率 。 請你返回你可以得到的 最大 頻率分數。 眾數指的…

excel經驗

Q:我現在有一個excel&#xff0c;有一列數據&#xff0c;大概兩千多行。如何在這一列中 篩選出具有關鍵字的內容&#xff0c;并輸出到另外一列中。 A: 假設數據在A列&#xff08;A1開始&#xff09;&#xff0c;關鍵字為“ABC”在相鄰空白列&#xff08;如B1&#xff09;輸入公…

HTTP查詢參數示例(XMLHttpRequest查詢參數)(帶查詢參數的HTTP接口示例——以python flask接口為例)flask查詢接口

文章目錄 HTTP查詢參數請求示例接口文檔——獲取城市列表代碼示例效果 帶查詢參數的HTTP接口示例——以python flask接口為例app.pyREADME.md運行應用API示例客戶端示例關鍵實現說明&#xff1a;運行方法&#xff1a; HTTP查詢參數請求示例 接口文檔——獲取城市列表 代碼示例…

將飛帆制作的網頁作為 div 集成到自己的網頁中

并且自己的網頁可以和飛帆中的控件相互調用函數。效果&#xff1a; 上鏈接 將飛帆制作的網頁作為 div 集成到自己的網頁中 - 文貝 進入可以復制、運行代碼

Redis主從復制:告別單身Redis!

目錄 一、 為什么需要主從復制&#xff1f;&#x1f914;二、 如何搭建主從架構&#xff1f;前提條件?步驟&#x1f4c1; 創建工作目錄&#x1f4dc; 創建 Docker Compose 配置文件&#x1f680; 啟動所有 Redis&#x1f50d; 驗證主從狀態 &#x1f4a1; 重要提示和后續改進 …

k8s 1.30.6版本部署(使用canal插件)

#系統環境準備 參考 https://blog.csdn.net/dingzy1/article/details/147062698?spm1001.2014.3001.5501 #配置下載源 curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key |gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyri…

機器學習的一百個概念(7)獨熱編碼

前言 本文隸屬于專欄《機器學習的一百個概念》&#xff0c;該專欄為筆者原創&#xff0c;引用請注明來源&#xff0c;不足和錯誤之處請在評論區幫忙指出&#xff0c;謝謝&#xff01; 本專欄目錄結構和參考文獻請見[《機器學習的一百個概念》 ima 知識庫 知識庫廣場搜索&…

RHCSA復習

在Linux中&#xff0c; wrx 分別代表寫&#xff08;write&#xff09;、讀&#xff08;read&#xff09;和執行&#xff08;execute&#xff09;權限&#xff0c;它們對應的權限值分別是&#xff1a; - r &#xff08;讀權限&#xff09;&#xff1a;權限值為4。 - w &am…

“樂企“平臺如何重構業財稅票全流程生態?

2025年&#xff0c;國家稅務總局持續推進的"便民辦稅春風行動"再次推進數字化服務升級&#xff0c;其中"樂企"平臺作為稅務信息化的重要載體&#xff0c;持續優化數電票服務能力&#xff0c;為企業提供更高效、更規范的稅務管理支持。在這一背景下&#xf…

Android audio(6)-audiopolicyservice介紹

AudioPolicyService 是策略的制定者&#xff0c;比如某種 Stream 類型不同設備的音量&#xff08;index/DB&#xff09;是多少、某種 Stream 類型的音頻數據流對應什么設備等等。而 AudioFlinger 則是策略的執行者&#xff0c;例如具體如何與音頻設備通信&#xff0c;維護現有系…

Boost庫搜索引擎項目(版本1)

Boost庫搜索引擎 項目開源地址 Github&#xff1a;https://github.com/H0308/BoostSearchingEngine Gitee&#xff1a;https://gitee.com/EPSDA/BoostSearchingEngine 版本聲明 當前為最初版本&#xff0c;后續會根據其他內容對當前項目進行修改&#xff0c;具體見后續版本…

git分支合并信息查看

TortoiseGit工具 1、選擇"Revision graph" 2、勾選view中的 Show branchings and merges Arrows point towards merges 3、圖案說明 紅色部分?&#xff1a;代表當前分支 橙色部分?&#xff1a;代表遠程分支 黃色部分?&#xff1a;代表一個tag 綠色部分?&#xf…

Java學習筆記(多線程):ReentrantLock 源碼分析

本文是自己的學習筆記&#xff0c;主要參考資料如下 JavaSE文檔 1、AQS 概述1.1、鎖的原理1.2、任務隊列1.2.1、結點的狀態變化 1.3、加鎖和解鎖的簡單流程 2、ReentrantLock2.1、加鎖源碼分析2.1.1、tryAcquire()的具體實現2.1.2、acquirQueued()的具體實現2.1.3、tryLock的具…

在C++11及后續標準中,auto和decltype是用于類型推導的關鍵特性,它們的作用和用法。

在C11及后續標準中&#xff0c;auto和decltype是用于類型推導的關鍵特性&#xff0c;它們的作用和用法有所不同。以下是詳細說明&#xff1a; 1. auto 關鍵字 基本作用 自動推導變量的類型&#xff08;根據初始化表達式&#xff09;主要用于簡化代碼&#xff0c;避免顯式書寫…

Linux:進程程序替換execl

目錄 引言 1.單進程版程序替換 2.程序替換原理 3.6種替換函數介紹 3.1 函數返回值 3.2 命名理解 3.3 環境變量參數 引言 用fork創建子進程后執行的是和父進程相同的程序(但有可能執行不同的代碼分支)&#xff0c;我們所創建的所有的子進程&#xff0c;執行的代碼&#x…

LeetCode.02.04.分割鏈表

分割鏈表 給你一個鏈表的頭節點 head 和一個特定值 x &#xff0c;請你對鏈表進行分隔&#xff0c;使得所有 小于 x 的節點都出現在 大于或等于 x 的節點之前。 你不需要 保留 每個分區中各節點的初始相對位置。 示例 1&#xff1a; 輸入&#xff1a;head [1,4,3,2,5,2], x …