二分法查找一个数字在有序增序数组中的位置
程序员文章站
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));
}
}
下一篇: Django路由层如何获取正确的url
推荐阅读
-
C++实现LeetCode(34.在有序数组中查找元素的第一个和最后一个位置)
-
在排序数组中查找元素的第一个和最后一个位置、变形二分法
-
#leetcode刷题之路34-在排序数组中查找元素的第一个和最后一个位置
-
34. 在排序数组中查找元素的第一个和最后一个位置
-
Leetcode No.34 在排序数组中查找元素的第一个和最后一个位置
-
算法007:二分查找 请实现有重复数字的有序数组的二分查找,输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一
-
在排序数组中查找元素的第一个和最后一个位置(二分、lower_bound、upper_bound)
-
在排序数组中查找元素的第一个和最后一个位置
-
34. 在排序数组中查找元素的第一个和最后一个位置【二分待完成】
-
在一个有序的旋转数组中,查找给定值