class Solution {
/**
* @param nums: The integer array.
* @param target: Target to find.
* @return: The first position of target. Position starts from 0.
*/
public int binarySearch(int[] nums, int target) {
// 2015-4-1 O(log n)
if (nums == null || nums.length == 0) {
return -1;
}
int start = 0;
int end = nums.length - 1;
while (start + 1 < end) {
int mid = start + (end - start) / 2; // 防止越界 等同于(start + end) / 2
if (nums[mid] >= target) {
end = mid;
} else {
start = mid;
}
} // while
if (nums[start] == target) {
return start;
}
if (nums[end] == target) {
return end;
}
return -1;
}
}
普通的二分搜索,数组中不含重复元素
class Solution {
/**
* @param nums: The integer array.
* @param target: Target to find.
* @return: The first position of target. Position starts from 0.
*/
public int binarySearch(int[] nums, int target) {
//write your code here
if (nums == null || nums.length == 0) {
return -1;
}
int start = 0;
int end = nums.length - 1;
while (start + 1 < end) {
int mid = (start + end) / 2;
if (num[mid] == target) {
return mid;
} else if (nums[mid] < target) {
start = mid + 1;
}
if (nums[mid] >= target) {
end = mid - 1;
}
}
if (nums[start] == target) {
return start;
} else if (nums[end] == target) {
return end;
}
return -1;
}
}
python
class Solution:
# @param nums: The integer array
# @param target: Target number to find
# @return the first position of target in nums, position start from 0
def binarySearch(self, nums, target):
if len(nums) == 0:
return -1
start = 0
end = len(nums) - 1
while start < end - 1:
mid = (start + end) / 2
if nums[mid] < target:
start = mid
else:
end = mid
if nums[start] == target:
return start
if nums[end] == target:
return end
return -1