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
提示:
- 你可以假設
nums
中的所有元素是不重複的。 n
將在[1, 10000]
之間。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); } }