一.非递归法
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
public int search (int[] nums, int target) {
// write code here
//如果数组长度为0,返回-1,找不到目标值
if (nums.length == 0) return -1;
//记录数组的长度
int lenSize = nums.length;
//定义一个左下标和右下标
int left = 0;
int right = nums.length - 1;
//当left小于等于right时进行判断
while (left <= right) {
//定义中间值mid
int mid = (left + right) / 2;
/**
* 小于中间值,说明在左半区,
* 大于中间值,说明在右边区
*/
if (nums[mid] < target)
left = mid + 1;
else if (nums[mid] > target) {
right = mid - 1;
}else return mid;
}
//没找见,返回-1
return -1;
}
}
二.递归法
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
public int search (int[] nums, int target) {
// write code here
if (nums.length == 0) return -1;
return searchBinaryNum(nums,0,nums.length - 1,target);
}
//定义一个中间值
int mid = 0;
private int searchBinaryNum(int[] nums,int left,int right,int target) {
//如果数组长度为0,返回-1
if (nums.length == 0) return -1;
//当left小于等于right的时候进行递归
if (left <= right) {
//mid就是left和right的中间值
mid = (left + right) / 2;
/**
* 比中间值大递归右边,
* 比中间值小递归左边
*/
if (nums[mid] > target) searchBinaryNum(nums,left,mid - 1,target);
else if (nums[mid] < target) searchBinaryNum(nums,mid + 1,right,target);
}
//如果找见了,返回mid下标,否则就返回-1
return (nums[mid] == target) ? mid : -1;
}
}
文章来源地址https://www.toymoban.com/news/detail-641723.html
文章来源:https://www.toymoban.com/news/detail-641723.html
到了这里,关于BM17 二分查找-I的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!