leetcode算法入门第一天,,时隔俩月,终于又双打开了算法基础大门,开始了三分热度° 的奋斗~ ~ ~ ~
需要test的伙伴这里连接:https://leetcode-cn.com/problems/binary-search/submissions/
1-二分查找
第一次尝试
先给个测试通过的demo:
class Solution {
public int search(int[] nums, int target) {
int ans = biSearch(nums,0,nums.length-1,target);
return ans;
}
public static int biSearch(int[] nums,int start, int end,int target){
int mid = start+((end-start)>>1);
if(target>nums[mid]&&target<=nums[end]) return biSearch(nums,mid+1,end,target);
else if(target<nums[mid]&&target>=nums[start])return biSearch(nums,start,mid,target);
else if(target==nums[mid]) return mid;
else return -1;
}
}
这是离谱的错误demo,—惨不忍睹;去看看代码错哪里了。
第二次错误:
2-第一个错误版本
写了一个递归版的res:
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int ans = biSearch(1,n);
if(isBadVersion(1))return 1;
else return ans;
}
public int biSearch(int lo,int hi){
int mid = lo+((hi-lo)>>1);
if(lo>=hi)return lo;
if(isBadVersion(mid)){
return biSearch(lo,mid);
}else{
return biSearch(mid+1,hi);
}
}
}
最后,抛出一个失败demo:
差点就想暴力了。