1. 程式人生 > >704,二分查詢

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]
    之間。

方法一:迭代法:

class Solution {     public int search(int[] nums, int target) {              if(nums == null || nums.length == 0)     return -1;

  int left = 0, right = nums.length - 1;   while(left <= right){     // Prevent (left + right) overflow     int mid = left + (right - left) / 2;     if(nums[mid] == target)     {          return mid;      }     else if(nums[mid] < target)     {          left = mid + 1;     }     else     {         right = mid - 1;     }    }

  // End Condition: left > right   return -1; } }

方法二:遞迴法;

class Solution {     public int search(int[] nums, int target) {     return  searchTarget(nums,0,nums.length-1,target);   }     private int searchTarget(int[] nums,int left,int right,int target)     {               if(nums == null || nums.length == 0)      return -1;          // Prevent (left + right) overflow     int mid = left + (right - left) / 2;     if(nums[mid] == target)     {          return mid;      }     else if(nums[mid] < target)     {          left = mid + 1;     }     else     {         right = mid - 1;     }      if(left>right)      return -1;       else      return searchTarget(nums,left,right,target);            } }