欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二分法查找一个数字在有序增序数组中的位置

程序员文章站 2022-03-13 12:58:11
...

问题:给定一个有序增序的数组,给一个值,求这个值在数字中的位置,结果有3中情况:

1.数值不在数组中,返回-1;

2.数值在数组中,且仅存在一次,返回该值的下标。

3.数值在数组中,存在多次,返回该值最右侧下标。

要求:不能用遍历。

解答:用二分法。

比如一个数组为{1,2,2,3}。如果求1的位置,则是0;如果求2的位置,则是2,因为2重复出现2次,第一次下标是1,第二次下标是2,要求最右侧下标。

package getLocation;

public class getLocation {

	public static int getIndex(int[] nums,int length,int target){
		int index=0;
		int low=0;
		int high=length-1;
		int mid=0;
		if(target<nums[0]||target>nums[length-1])
			return -1;
		while(low<=high)
		{
			mid=(high+low)/2;
			if(nums[mid]>target)
			{
				high=mid-1;
			}
			else if(nums[mid]<target)
			{
				low=mid+1;
			}
			else
			{
				while(mid+1<=length-1&&nums[mid+1]==target)
				{
					mid=mid+1;
				}
				return mid;
			}
		}
		return 0;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int nums[]={1,2,3,4,4,5};
		int target=5;
		System.out.println("index is"+getIndex(nums,nums.length,target));
	}

}