704 二分查找


切记等于要用双等号;

原用递归函数,但这道题给的函数用递归会不容易求下标;

1.C++

#include  
#include  
#include  
#include
using namespace std;
class Solution {
public:
    int search(vector<int>& nums, int target) {
      int left,right;
      left=0;right=nums.size()-1;
      while(left<=right)
      {
        int middle=left+(right-left)/2;
      if(target==nums[middle])
          return middle;
      else if(target<nums[middle])
          right = middle-1;
        else 
            left=middle+1;        
      }
      return -1;}
};
int main()
{
    int num[6] = {-1,0,3,5,9,12};
    vector<int> nums(num,num+6);
    int target = 2;
    Solution f ;
    cout<<f.search(nums,target); 
    return 0;
    
} 

2.JAVA

递归

class Solution {
    public int search(int[] nums, int target) {
       return dg(nums,0,nums.length-1,target);
    }
    private int dg(int []nums,int left,int right,int target){
        if(right<left)
            return -1;
        else{
        int middle=left+(right-left)/2;
        if(target==nums[middle])
        {
            return middle;
        }
        else if(target>nums[middle])
            return dg(nums,middle+1,right,target);
        else
            return dg(nums,left,middle-1,target);
            
        }    
        
    }
}

public class 二分查找704 {
    public static void main(String[] args) {
        Solution s=new Solution();
        int []nums={-1,0,3,5,9,12};
        Scanner sc=new Scanner (System.in);
        System.out.print("target=");
        int target = sc.nextInt();
        int index=s.search(nums,target);
        
        System.out.println("下标是:"+index);
        
    }

}