Easy 704. Binary Search
In this blog I will share a solution to the Binary Search problem.
題目連結
難度:Easy
給定一個已排序的整數陣列 nums 和一個目標值 target,如果目標值存在於陣列中則返回其索引,否則返回 -1。Example 1:Example 2:
限制
- 1 <= nums.length <= 10^4
- -10^4 <= numsi <= 10^4
- nums 中的所有值都獨一無二
- nums 已按升冪排列
- -10^4 <= target <= 10^4
Array
Binary Search
解題思路
這題使用二分搜尋法,步驟如下:
- 初始設定
- 搜尋過程
複雜度分析
- 時間複雜度:O(log n),每次比較都會將搜尋範圍減半
- 空間複雜度:O(1),只使用常數額外空間
狀態機設計
程式碼實作
狀態說明
- Searching: 主要搜尋狀態
- 包含整個搜尋過程
- 控制搜尋的流程和轉換
- CompareMiddle: 比較中間值
- 計算中間位置
- 比較目標值和中間值
- 決定下一步行動
- SearchRight: 往右搜尋
- 當目標值大於中間值
- 更新搜尋範圍到右半部
- SearchLeft: 往左搜尋
- 當目標值小於中間值
- 更新搜尋範圍到左半部
- Found: 找到目標
- 當中間值等於目標值
- 返回當前索引
- NotFound: 未找到目標
- 當搜尋範圍耗盡
- 返回 -1
解題心得
- 二分搜尋的關鍵
- 陣列必須是已排序的
- 正確處理邊界條件很重要
- 注意中間值的計算方式
- 實務應用
- 二分搜尋在大型資料集中特別有用
- 可以提升搜尋效率
- 常用在資料庫索引情境內
::