二分查找返回大于某数的最小索引和小于某数的最大索引

本文介绍了如何使用二分查找算法分别找到数组中大于和小于特定数值的最大/最小索引,同时考虑了元素重复情况。通过实例演示了在重复元素中找到最近值的策略,并明确了无解时的返回值。

二分查找大于某数的最小索引:

1.数组中元素重复时,返回最接近的索引。如nums={5,7,7,8,8,10} target=5 则返回的索引值为1即  指向第一个值为7的元素 

2.若返回的ans=nums.length说明数组中没有比target大的元素

public int binarySearch(int[] nums, int target) {
         int start=0;
         int end=nums.length-1;
         int ans=nums.length;
         while(start<=end) {
             int mid=start+(end-start)/2;
             if(nums[mid]>target) {
                 end=mid-1;
                 ans=mid;
             }else {
                 start=mid+1;
             }
         }
         return ans;
     }

二分查找小于某数的最大索引:

与大于某数的最小索引同理,略作改变

1.数组中元素重复时,返回最接近的索引。如nums={5,7,7,8,8,10} target=10 则返回的索引值为4即指向第二个值为8的元素 

2.若返回的ans=-1说明数组中没有比target小的元素

public int binarySearch(int[] nums, int target) {
         int start=0;
         int end=nums.length-1;
         int ans=-1;
         while(start<=end) {
             int mid=start+(end-start)/2;
             if(nums[mid]>=target) {
                 end=mid-1;
             }else {
                 start=mid+1;
                 ans=mid;
             }
         }
         return ans;
     }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值