9.二分查找

9.二分查找

题目描述

请实现有重复数字的升序数组的二分查找。

输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数(指不存在大于等于查找值的数),则输出数组长度加一。

输入

5,4,[1,2,4,4,5]

返回值

3

说明

输出位置是从1开始算的

分析

1.主要算法思想为二分查找思想,也就是折半查找思想。

2.本题目的主要难度在于对题目的题意理解,n是数组的长度,v是查找的目标,a是目标数组

3.首先我们要明确一点,二分查找只适用于有序的数组中,其次在进行对题目本身的操作

4.确定一个中间位置,然后与目标值v进行比较,在重复此操作即可

代码实现

 public  int upper_bound_ (int n, int v, int[] a) {
		int i=0;
		int j=n-1;
		int mid = (i+j)/2;
		while(i<=j) {
			if(a[mid]0&&a[mid-1]>=v) {
				j=mid-1;
				mid=(i+j)/2;
			}else{
				return mid+1;
            }
		}
		return n+1;
    }
}

你可能感兴趣的:(牛客编程习题)