二分查找 || 数的范围

文章目录

题目

跳转链接

在这里插入图片描述

题解

  • 这道题关于二分查找的应用

Tips:二分查找可以分为 递归法与非递归方法

  • 1、二分查找一个大于等于X的最小值
  • 2、二分查找一个小于等于x的最大值。

  • 这里推荐一篇大佬的讲解

参考链接

代码

package Algorithm;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 * @author LZH.create
 *   二分查找求数的范围
 */
public class BinarySearchNum {

	    static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	    static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
	    static String[] s = new String[100010];
	    static int[] arr = new int[100010];
	    static int n, q;
	    
	    public static int findl(int x){
	        int l = 0, r = n-1;
	        while(l < r){
	            int mid = l + r >> 1;
	            if(arr[mid] < x) l = mid + 1;
	            else r = mid;  
	        }
	        return l;
	    }
	      public static int findr(int x){
	        int l = 0, r = n-1;
	        while(l < r){
	            int mid = l + r + 1 >> 1;
	            if(arr[mid] > x) r = mid - 1;
	            else l = mid;  
	        }
	        return l;
	    }
	    
	    public static void main(String[] agrs) throws IOException {
	        String[] test = in.readLine().split(" ");
	        n = Integer.valueOf(test[0]);
	        q = Integer.valueOf(test[1]);
	        
	        s = in.readLine().split(" ");
	        for(int i = 0; i < n; i++) arr[i] = Integer.parseInt(s[i]);
	        for(int i = 0; i < q; i++){
	            int x = Integer.valueOf(in.readLine());
	            int l = findl(x);
	            int r = findr(x);
	            if(x != arr[l]) out.write("-1 -1\n"); //  找不到  不存在  
	            else out.write(l + " " + r + "\n");
	        }
	        out.flush();
	    } 
	    
	    


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值