Java版二分查找:
package com.binarySearch.binarySearch;
public class BinarySearch_Balance {
static int binarySearch_Balance(int[] arr, int target){
if (target<arr[0] || target> arr[arr.length -1]) //如果目标在超出容器范围就不必寻找
return -1;
int left = 0;
int right = arr.length;
while(left < right){
int middle = ((left + right) >>> 1);
if(target < arr[middle])
right = middle;
else
left = middle + 1;
}
return (arr[left] == target ? left : -1);
}
public static void main(String[] args) {
int[] arr = {-1, 1, 7, 15, 23, 33, 88, 109};
int res = binarySearch_Balance(arr, 15);
if(res != - 1)
System.out.printf("target(%d) has been found", res);
else
System.out.println("no target");
}
}
C++版二分查找
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
static int search(vector<int>& nums, int target) {
if (target<nums[0] || target>*(nums.end() - 1)) //如果目标在超出容器范围就不必寻找
return -1;
int i = 0; //头指针
int j = nums.size(); //尾指针
while (i < j) {
int m = (i + j) >> 1; //中间值
if (nums[m] < target)
i = m + 1;
else
j = m;
}
return (nums[i] == target ? i : -1);
}
};
int main() {
vector<int> nums = {-1,2,4,5,7,9,11,34,55,67 };
int index = Solution::search(nums, -2);
if (index != -1) {
cout << nums[index] << endl;
}
else {
cout << "Target not found" << endl;
}
return 0;
}
为什么java版输出始终是"no target"?, C++版却能够成功