LeetCode笔记汇总
题目
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
思路
定义左右两个指针,左指针开始时指向0,右指针指向末尾,即nums.length-1。再计算一个中间指针mid,它的值即左右指针的中点。简单的计算方法为(left+right)/2 ,但是有可能左右指针相加会超过int类型的最大值,因此采用left + (right - left) / 2 的计算方法。比较nums[mid]与target的值,若相等则直接返回mid,否则如果比target大,则右指针减一,否则左指针加一。 这个过程因该在循环中进行,当找到目标值时直接return返回,没有找到时,一直进行循环,直到left>right。此时即没有结果,返回-1
代码
class Solution {
public int search(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while(left <= right) {
int mid = left + (right - left) / 2;
if(nums[mid] == target) {
return mid;
} else if(nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
}
|