SW练习_P2249_二分查找

博客内容讨论了一道编程题目,题目名为SW练习_P2249,但作者认为其实际考察的是Java性能优化,因为题目对于内存和时间限制的要求可能导致使用Java解答回导致超时(TLE)。
摘要由CSDN通过智能技术生成

这哪里是二分查找啊,这分明是赤裸裸的java歧视

你卡个1S,125M内存,会TLE啊,伙计们

 

package info.frady.luogu;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.StringTokenizer;

public class P2249 {
    static int[] arr;
    public static void main(String[] args) throws Exception {
        //BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ///StringTokenizer st = new StringTokenizer(reader.readLine());
        StreamTokenizer st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        st.nextToken();
        int N = (int)st.nval;//数字个数
        st.nextToken();
        int M = (int)st.nval;//询问次数
        arr = new int[N + 1];
        arr[0]=-1009;
        //st = new StringTokenizer(reader.readLine());
        for (int i = 1; i <= N; i++) {
            st.nextToken();
            arr[i] = (int)st.nval;
        }

        StringBuilder ans = new StringBuilder();
        for (int i = 0; i < M; i++) {
            st.nextToken();
            ans.append(find( (int)st.nval)).append(' ');
        }
        System.out.println(ans.toString());


        //reader.close();
    }

    public static int find(int a) {//数组多开了一个,从1开始
        int low = 1;
        int high = arr.length - 1;
        int res=-1;
        while (high > low) {
            int mid = low+(high-low) / 2;
            if (arr[mid] >= a) {
                high = mid;
            } else {
                low = mid + 1;
            }
        }

        if (a==arr[low]) {
            return low;
        }else {
            return -1;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值