算法 - 每日一題 | 二分查找 704

題目描述:

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

示例1:

輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中並且下標爲 4

示例2:

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

提示:

  1. 你可以假設 nums 中的所有元素是不重複的。
  2. n 將在 [1, 10000]之間。
  3. nums 的每個元素都將在 [-9999, 9999]之間。

方法:二分查找

二分查找是一種基於比較目標值和數組中間元素的教科書式算法。

  • 如果目標值等於中間元素,則找到目標值。
  • 如果目標值較小,繼續在左側搜索。
  • 如果目標值較大,則繼續在右側搜索。

算法:

  • 初始化指針 left = 0, right = n - 1
  • left <= right
    • 比較中間元素 nums[pivot] 和目標值 target
      • 如果 target = nums[pivot],返回 pivot
      • 如果 target < nums[pivot],則在左側繼續搜索 right = pivot - 1
      • 如果 target > nums[pivot],則在右側繼續搜索 left = pivot + 1

/**
 * @Author 庭前雲落
 * @Date 2021/6/30 10:55
 * @Description
 */
public class Solution {
    public int search(int[] nums,int target){
        int pivot,left = 0,right = nums.length-1;
        while(left<=right){
            pivot = left + (right - left)/2;
            if(nums[pivot]== target) return pivot;
            if(target < nums[pivot]) right = pivot -1;
            else left = pivot +1;
        }
        return -1;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章