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); } }