代码拉取完成,页面将自动刷新
同步操作将从 doocs/leetcode 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
前面讲的二分查找算法,是最为简单的一种,在不存在重复元素的有序数组中,查找值等于给定值的元素。
接下来,我们来看看二分查找算法四种常见的变形问题,分别是:
public static int search(int[] nums, int val) {
int n = nums.length;
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
if (nums[mid] < val) {
low = mid + 1;
} else if (nums[mid] > val) {
high = mid - 1;
} else {
// 如果nums[mid]是第一个元素,或者nums[mid-1]不等于val
// 说明nums[mid]就是第一个值为给定值的元素
if (mid == 0 || nums[mid - 1] != val) {
return mid;
}
high = mid - 1;
}
}
return -1;
}
public static int search(int[] nums, int val) {
int n = nums.length;
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
if (nums[mid] < val) {
low = mid + 1;
} else if (nums[mid] > val) {
high = mid - 1;
} else {
// 如果nums[mid]是最后一个元素,或者nums[mid+1]不等于val
// 说明nums[mid]就是最后一个值为给定值的元素
if (mid == n - 1 || nums[mid + 1] != val) {
return mid;
}
low = mid + 1;
}
}
return -1;
}
public static int search(int[] nums, int val) {
int low = 0, high = nums.length - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
if (nums[mid] < val) {
low = mid + 1;
} else {
// 如果nums[mid]是第一个元素,或者nums[mid-1]小于val
// 说明nums[mid]就是第一个大于等于给定值的元素
if (mid == 0 || nums[mid - 1] < val) {
return mid;
}
high = mid - 1;
}
}
return -1;
}
public static int search(int[] nums, int val) {
int n = nums.length;
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
if (nums[mid] > val) {
high = mid - 1;
} else {
// 如果nums[mid]是最后一个元素,或者nums[mid+1]大于val
// 说明nums[mid]就是最后一个小于等于给定值的元素
if (mid == n - 1 || nums[mid + 1] > val) {
return mid;
}
low = mid + 1;
}
}
return -1;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。