当前位置: 首页 > 后端技术 > Java

牛客网高频算法习题系列-BM17-二分查找-I

时间:2023-04-01 17:01:52 Java

牛客网高频算法习题系列-BM17-二分查找-I题目描述请实现一个无重复数的升序数组的二分查找给定一个元素一个没有重复数的升序整数数组nums和一个目标值target,写一个函数在nums中搜索目标,如果目标值存在则返回下标(下标从0开始),否则返回-1原题见:BM17BinarySearch-I方案一:二分查找法首先考虑特殊情况,判断如果数组为空则返回-1。否则就用low和high作为数组的上下限,然后用二分法判断数组中的元素。判断过程如下:首先,循环终止的条件是low大于high两点,mid取中间值。如果mid的值等于target,则返回mid。如果mid的值大于target,则更新high。如果mid的值小于target,则返回low。最后,如果二分查找没有找到等于target的值,则返回-1。代码publicclassBm017{/***binarysearch-I**@paramnumsintinteger一维数组*@paramtargetintinteger*@returnintinteger*/publicstaticintsearch(int[]nums,inttarget){//如果数组为空,返回-1if(nums==null||nums.length==0){return-1;}//low和high分别是数组的上限和下限intlow=0,high=nums.length-1;//循环终止的条件是low大于hiwhile(low<=high){//一分为二,mid取中间值intmid=(low+high)/2;//Ifmidis如果mid的值等于target,返回mid//如果mid的值大于target,更新high//如果mid的值小于target,返回lowif(nums[mid]==目标){返回中间;}elseif(nums[mid]>target){high=mid-1;}else{低=中+1;}}//如果二分查找没有找到等于target的值,则返回-1return-1;}publicstaticvoidmain(String[]args){int[]nums={-1,0,3,4,6,10,13,14};//测试用例,预期输出:6System.out.println(search(nums,13));}}$1.01^{365}≈37.7834343329$$0.99^{365}≈0.02551796445$相信坚持的力量!